如何编写PowerShell脚本定向替换指定开头行的行尾字符串
PowerShell定向行替换方案
原有脚本使用-Raw参数一次性读取全文件做全局替换,会匹配所有位置的</ab></cb>字符串,无法实现定向替换需求,改用逐行判断处理即可满足要求。
可直接运行的脚本
目标文件路径已按需求设置为C:\Users\User1\File\Summary.txt,脚本运行后会直接覆盖原文件,保留原文件名:
$targetFile = "C:\Users\User1\File\Summary.txt" $processedContent = Get-Content -Path $targetFile | ForEach-Object { $currentLine = $_ # 同时校验行开头、行尾规则 if ($currentLine.StartsWith('<a><b>Data') -and $currentLine.EndsWith('</ab></cb>')) { # 截除行尾目标字符串,替换为新结尾 $currentLine.Substring(0, $currentLine.Length - 10) + '</x>' } else { # 不符合规则的行原样保留 $currentLine } } $processedContent | Set-Content -Path $targetFile
实现逻辑
- 逐行读取文件内容,不做全文件全局匹配,避免误改非目标内容
- 使用.NET字符串原生的
StartsWith和EndsWith方法做行首行尾校验,无正则转义问题,执行效率更高 - 对符合规则的行,仅替换末尾固定长度的
</ab></cb>字符串(长度共10个字符),行中间内容完全不改动 - 处理完成后直接写回原文件路径,文件名无任何变更
注意:如果处理后文件出现乱码,可以给
Set-Content命令添加对应编码参数,比如原文件为UTF8编码时,写回命令改为$processedContent | Set-Content -Path $targetFile -Encoding UTF8即可。
效果示例
原符合规则的行:
<a><b>Data:</y> 12345678</ab></cb>
处理后结果:
<a><b>Data:</y> 12345678</x>
所有不满足“以<a><b>Data开头、以</ab></cb>结尾”规则的行,不会被做任何修改。
内容的提问来源于stack exchange,提问作者ecuso
相关产品推荐
相关产品推荐

