powershell 仅按特定次数替换文件中的文本

wgx48brx  于 2023-05-22  发布在  Shell
关注(0)|答案(1)|浏览(125)

我有一个文件,同一文本共出现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)"

我尝试使用Replacing only the first occurrence of a word in a string的答案:

powershell -command "$null=new-item -force test.txt -value ((gc -encoding utf8 test.txt) -replace ('^.*$','Goodbye',2) | out-string)"

这给了我BadReplaceArgument错误。

xurqigkl

xurqigkl1#

看起来你正在寻找一个对Regex.Replace API的直接调用,当然-replace操作符没有count的重载。

$re = [regex]::new('^.*', [System.Text.RegularExpressions.RegexOptions]::Multiline)

$re.Replace(@'
Hello
Hello
Hello
Hello
Hello
'@, 'Goodbye', 2)

如果执行CLI调用,则可能会执行以下操作(注意,在Get-Content上使用-Raw非常重要!):

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
'@

相关问题