sed 多行条件匹配修改
cat test
111
222
333
---
---
111
222
333
---
111
333
---
111
222
需要将
111
222
333
替换成
444
555
666
使用sed命令
sed -n '1h;1!H;${g;s/111.222.333/444\n555\n666/g;p}' test
444
555
666
---
---
444
555
666
---
111
333
---
111
222
如写回文件可使用sed -n '1h;1!H;${g;s/111.222.333/444\n555\n666/g;p}' test>test.1&&mv test.1 test
解释:
- -n:表示关闭默认的输出,只输出指定的内容。
- 1h:表示将第一行的内容保存到sed缓冲区(pattern space)中,即把第一行作为模式空间。
- 1!H:表示对非第一行的行,追加到缓冲区的末尾,即对第二行及以后的行,使用“H”命令将它们追加到模式空间的末尾。
- ${}:表示到文件结尾为止。
- g:表示将模式空间的内容拷贝至保持空间。
- s:表示替换操作,将模式空间中的"111.222.333"替换为"444\n555\n666",其中“.”用来匹配空格或者换行符。
- p:表示输出模式空间的内容。
因此,上述命令的含义是:首先将第一行保存到模式空间中,然后将后面的所有行追加到缓冲区的末尾,并且将所有行合并到模式空间中;然后对模式空间中的内容进行查找和替换,将其中所有的"111.222.333"字符串替换为"444\n555\n666"字符串;最后输出替换后的结果。
标签:
Linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了