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

问题描述 投票:0回答:1

我有一个文件,其中相同的文本总共出现了 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 错误。

powershell batch-file replace
1个回答
1
投票

您似乎正在寻找对

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
'@
© www.soinside.com 2019 - 2024. All rights reserved.