如何用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
相关产品推荐
相关产品推荐

