You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:40:25