【发布时间】:2020-07-06 07:52:03
【问题描述】:
我有一个包含数千行的文本文件,看起来像这样:
# RandomLocation.xaml:1234
msgid "RandomString"
msgstr ""
# AnotherLocation.cs:123
msgstr ""
我需要找到并删除其中没有 msgid 的每个块,我正在尝试使用正则表达式来完成。
$temp | ForEach-Object{
Select-String -Path $($DestinationPath + $culturename + ".po") -Pattern '#[: ](.)\w+.[cx][sa][m]{0,1}[l]{0,1}:\d+\nmsgstr ".*"' -AllMatches | ForEach-Object {
$_.Matches | ForEach-Object{
$temp2 = $_.Value
$delete.Add($_.Value)
}
}
}
如果我从模式中删除\nmsgstr ".*"',它会正常工作并检测每个# RandomLocation:1234,但是当我试图找到两行时它不起作用。任何想法我做错了什么?
@edit:它可以工作,但是我无法从文件中删除这些行。它是一个数组列表,虽然用$file.Remove($_.Value) 删除单行有效,但当$_.Value 有两行时就不行了。
【问题讨论】:
标签: powershell