我有一个文件,其中相同的文本总共出现了 5 次。我现在只想用批处理文件中的 powershell 命令替换前 2 次出现。
Hello -- I want to only
Hello -- replace those.
Hello
Hello
Hello
所以我的文件看起来像这样:
Goodbye
Goodbye
Hello
Hello
Hello
我的代码是这样的:
powershell -command "$null=new-item -force test.txt -value ((gc -encoding utf8 test.txt) -replace ('^.*$','Goodbye') | out-string)"
我尝试使用 仅替换字符串中第一次出现的单词的答案:
powershell -command "$null=new-item -force test.txt -value ((gc -encoding utf8 test.txt) -replace ('^.*$','Goodbye',2) | out-string)"
这给了我 BadReplaceArgument 错误。
Regex.Replace
API 的直接调用,当然 -replace
运算符 没有 count
的重载。
$re = [regex]::new('^.*', [System.Text.RegularExpressions.RegexOptions]::Multiline)
$re.Replace(@'
Hello
Hello
Hello
Hello
Hello
'@, 'Goodbye', 2)
如果进行 CLI 调用,以下可能有效(注意,在
-Raw
上使用 Get-Content
在这里非常重要!):
powershell -Command @'
$re = [regex]::new('^.*', [System.Text.RegularExpressions.RegexOptions]::Multiline)
$re.Replace((Get-Content -Encoding utf8 test.txt -Raw), 'Goodbye', 2) |
Set-Content test.txt
'@