使用PowerShell在指定字符串出现时替换目标文件多行内容
PowerShell 批量文本替换方案
需求概述
处理50万行的code.txt文件:当连续出现以下两行内容时
[2] 1 string data = "
将紧接着的英文文本(到下一个英文双引号结束)替换为ita.txt(5万行)中的意大利语文本,按文件顺序依次取用,替换完即止。
实现脚本
# 读取意大利语文本到数组,按顺序取用 $italianTexts = Get-Content -Path ".\ita.txt" -Encoding UTF8 $currentItaIndex = 0 $isNextLineToReplace = $false # 逐行处理原文件,输出到目标文件 Get-Content -Path ".\code.txt" -Encoding UTF8 | ForEach-Object { if ($isNextLineToReplace) { # 匹配需要替换的行格式,替换双引号内内容 if ($_ -match '^\s*1 string data = "([^"]*)"$') { if ($currentItaIndex -lt $italianTexts.Count) { # 生成替换后的行 " 1 string data = `"$($italianTexts[$currentItaIndex])`"" $currentItaIndex++ } else { # 无可用意大利语文本时保留原行 $_ } } else { # 格式不符时直接输出原行 $_ } $isNextLineToReplace = $false } elseif ($_ -eq " [2]") { # 匹配到目标标记行,标记下一行需要处理 $_ $isNextLineToReplace = $true } else { # 其他行直接输出 $_ } } | Set-Content -Path ".\codeita.txt" -Encoding UTF8
脚本说明
- 文本预读取:将
ita.txt的所有内容存入数组,方便按顺序快速调用 - 状态标记:用
$isNextLineToReplace标记是否即将进入替换流程,当读到[2]时触发标记 - 替换逻辑:标记触发后,检查下一行是否符合指定格式,符合则替换双引号内的文本为当前意大利语文本,同时推进索引;若意大利语文本耗尽则保留原行
- 编码处理:指定
UTF8编码避免乱码问题,适配大文件处理
示例验证
针对给出的示例输入:
code.txt中两处[2]对应的英文文本,会被替换为ita.txt的前两行意大利语文本- 最终生成的
codeita.txt与期望输出完全一致
内容的提问来源于stack exchange,提问作者Kenryoku
相关产品推荐
相关产品推荐

