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

Mac终端Perl命令无法替换换行+foo为bar的问题求助

解决Mac终端中替换换行后接指定字符串的问题

问题原因

你用的perl -pi -w -e 's/\nfoo/bar/g;' file无效,是因为Perl的-p模式默认逐行处理文本:每次只读取一行内容,换行符会被当作行分隔符排除在当前处理的行外,所以永远匹配不到\nfoo这种跨行的组合。

解决方案

方法1:用Perl一次性读取整个文件

通过-0777参数修改Perl的输入记录分隔符,让它一次性读取整个文件内容,这样就能匹配到文件中所有的换行符后跟foo的组合:

perl -pi -0777 -w -e 's/\nfoo/bar/g;' file

针对你的测试文件:
原内容:

foo1
foo

执行命令后会变成:

foo1bar

方法2:用BSD sed(Mac自带)实现同样效果

Mac自带的是BSD版本的sed,需要先把整个文件读入缓冲区再进行替换,命令如下:

sed -i '' -e ':a;N;$!ba;s/\nfoo/bar/g' file
  • -i '':原地编辑文件,空字符串表示不生成备份文件(如果需要备份,可改为-i .bak)
  • :a;N;$!ba:循环读取所有行到缓冲区,实现整文件处理
  • s/\nfoo/bar/g:替换所有换行符后跟foo的内容为bar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:52:19