【发布时间】:2021-08-24 18:42:33
【问题描述】:
我有以下来自文本文件的示例数据
l1
l2
Start :
a1
a2
a3
-}
l3
l4
l5
Start :
a4
a5
a6
-}
我想提取两个标签“开始:”和-}之间的行
我尝试使用正则表达式提取详细信息,但输出是一行。我想用换行符输出
请帮忙。
【问题讨论】:
标签: powershell
我有以下来自文本文件的示例数据
l1
l2
Start :
a1
a2
a3
-}
l3
l4
l5
Start :
a4
a5
a6
-}
我想提取两个标签“开始:”和-}之间的行
我尝试使用正则表达式提取详细信息,但输出是一行。我想用换行符输出
请帮忙。
【问题讨论】:
标签: powershell
这将获取文本文件的原始内容(这意味着它将拉入回车符和新行)。然后使用该数据执行正则表达式以在“开始:”和“-}”之间提取您想要的数据以提取所有匹配项。然后它只输出找到的每个匹配项的值。如果你想将它存储在一个变量中,你可以在最后一个 foreach 循环中这样做。
$file = Get-Content -path "C:\text.txt" -Raw
$wantedData = ($file | select-string '(?<=Start\s:\n)[\w\s]*(?=-})' -allMatches |
foreach {$_.Matches} | Foreach {$_.Value})
【讨论】:
可能不是最好的方法,但只要它始终采用这种格式,它就可以工作:
$i = "l1 l2 Start : a1 a2 a3 -} l3 l4 l5 Start : a4 a5 a6 -}"
$i = $i.split(':').split('-}')
foreach ($line in $i) {
if ($line -notlike "*start*" ){ $line.trim() }
}
【讨论】:
在 start 和 -} 之间总是有 3 个值吗?
如果是,那么:
$Content = Get-Content -path C:\Text.txt
$content | Select-String -Pattern "Start :" -Context 0,3 | foreach {$_.Context.DisplayPostContext}
【讨论】: