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

求Perl/Sed命令:批量替换多文件Begin行的指定字符串

当然可以!下面我给你提供Sed和Perl两种实现方案,完全满足你的需求:

Sed 解决方案

如果你用的是GNU Sed(Linux系统默认),可以直接用下面的命令原地修改所有目标文件:

sed -i 's/Begin("\([^"]*\)","derived from file "\/disks\/setup\/\([^\/"]*\)\.txt");/Begin("\2","derived from file "\/disks\/setup\/\2.txt");/' *.txt

如果是macOS系统(BSD Sed),需要给-i参数加一个空字符串来兼容:

sed -i '' 's/Begin("\([^"]*\)","derived from file "\/disks\/setup\/\([^\/"]*\)\.txt");/Begin("\2","derived from file "\/disks\/setup\/\2.txt");/' *.txt

正则说明:

  • \([^"]*\):捕获第一个双引号内的内容(比如tmp1),对应你说的“变量1”
  • \([^\/"]*\):捕获最后一个/到.txt前的文件名(比如ORIG_FILE1),对应处理后的“变量2”
  • 替换时用\2替换原来的第一个捕获组内容,实现你的需求

Perl 解决方案

Perl的正则表达式更灵活,跨平台兼容性也更好,下面的命令会给原文件生成.bak备份(如果不需要备份,去掉.bak即可):

perl -i.bak -pe 's/Begin\("([^"]+)","derived from file "\/disks\/setup\/([^\/"]+)\.txt"\);/Begin("\2","derived from file "\/disks\/setup\/\2.txt");/' *.txt

参数说明:

  • -i.bak:原地修改文件,并生成后缀为.bak的备份文件
  • -p:循环处理每一行文本,处理后自动输出
  • 正则部分逻辑和Sed类似,([^"]+)和([^\/"]+)分别捕获对应内容,替换时用$2(Perl里用$引用捕获组)替换第一个引号内的内容

注意事项:

  1. 如果你的文件路径不是固定的/disks/setup/,可以调整正则里的路径匹配部分
  2. 把命令里的*.txt换成你实际要处理的文件名(比如file1.txt file2.txt)
  3. 建议先在单个测试文件上运行命令,确认效果后再批量处理所有文件

内容的提问来源于stack exchange,提问作者Programmer_99999

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 03:42:49