我一直在尝试编写一个脚本,该脚本读取给定文件并将“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/|
(管道作为分隔符)
答案 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/|