Powershell - 使用“|”将匹配字符串复制到新文件作为分隔符

时间:2016-01-20 03:38:19

标签: string powershell text copy copy-paste

我一直在尝试编写一个脚本,该脚本读取给定文件并将“value1:”和“value2”前面的任何内容复制到新的文本文件中。如果是一个非常相似的例子,则格式如下。

输入文件:

  

20/01/2016 00:00:18 Hsjdjskjlsadnfjk   
20/01/2016 00:00:18 Value1:/ test / OLD / myfiles /   
20/01/2016 00:00:18 Value2:/ test2 / NEW / currentfiles /   
20/01/2016 00:00:19 kjshfjksfdkls   
20/01/2016 00:00:19 Hdjdjndlkasjdflk   
20/01/2016 00:00:19 Value1:/ match / 2015 / pages /   
20/01/2016 00:00:20 Value2:/ replace / 2016 / pages /   
20/01/2016 00:00:20 Jdjddn klsndfk

预期产出:

/test/OLD/myfiles/|/test2/NEW/currentfiles/|
/match/2015/pages/|/replace/2016/page/|

(管道作为分隔符)

1 个答案:

答案 0 :(得分:0)

以下适用于我。但是,它会拆分':'和空格字符,如果字符串格式不像您的示例那样,它将无法按预期工作。

$string = "Hsjdjs Value1: /test/ Value2: /test2/ hsuan$&.&:&: Hdjdjnd Value1: /match/ Value2: /replace/ Jdjddn"
$results = $string.Split(": ") | ? {$_  -match "^\/*\/"}
$results -join "|"

输出:/ test / | / test2 / | / match / | / replace /

编辑:已更新以满足其他要求。这就是我可以带你这个。希望它适用于您尝试和解析的所有字符串。

[string[]]$lines = @()

$string = "Hsjdjs Value1: /test/ Value2: /test2/ hsuan$&.&:&: Hdjdjnd Value1: /match/ Value2: /replace/ Jdjddn"
$results = ($string -split "Value")

$value1 = $results | ? {$_.StartsWith("1")}
$value2 = $results | ? {$_.StartsWith("2")}

for ($i = 0; $i -lt $value1.Count; $i++)
{
    $formattedV1 = ($value1[$i].Trim("1: ") -split "\/*\/")[1]
    $formattedV2 = ($value2[$i].Trim("2: ") -split "\/*\/")[1]

    $lines += [string]::Format("/{0}/|/{1}/|",$formattedV1,$formattedV2)
}

$lines

输出是一个字符串数组,每个索引都有一个新行。 例如

[0]:/test/|/test2/|
[1]:/match/|/replace/|