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

如何用Sed处理跨行分布的目标模式且不替换换行符?

跨行匹配替换字符串(保留换行符)

原始文件内容:

yo@gmail.com, yo@
gmail.com yo@gmail
.com

需求是把字符串yo@gmail.com替换为e@email.com,单行场景可以用命令:

sed "s/yo@gmail.com/e@email.com/g" file

但现在要处理跨行拆分的该模式,同时保留换行符,期望输出:

e@email.com, e@
email.com e@email
.com

可以用sed的跨行处理能力实现,命令如下:

sed -e ':loop' -e 'N; s/yo@\ngmail.com/e@email.com/g' -e 's/yo@gmail\n.com/e@email.com/g' -e 't loop' file

命令说明:

  • :loop:定义一个循环标记,用于重复处理多行内容
  • N:将下一行读取到当前模式空间,把两行内容合并(换行符保留)
  • 两个s替换命令:分别匹配两种跨行拆分的yo@gmail.com——yo@+换行+gmail.com,以及yo@gmail+换行+.com,替换为目标字符串
  • t loop:如果执行了替换操作,就跳回loop标记继续处理,确保所有跨行情况都被覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:55:25