【Linux】shell学习之sed
2024-09-17 20:21:30
sed替换命令
使用该命令,可以将特定字符串或匹配的规则表达式用另一个字符串替换。
sed 's/88/--/' filename 将filename每行第一次出现的88用字符串--替换,然后将该文件内容输出到标准输出
sed 's/88/--/g' filename 附加g选项告诉sed执行全局替换
匹配第N个进行替换
N=1
sed '0,/88/s//--/' filename 只匹配到第一个88为止
sed ':a;N;$!ba;s/88/--/' filename
第二个命令
- :a 创建一个label a
- N 将下一行读入到pattern space
- $! 如果不是最后一行,ba跳转到label a处
- s/a/A/ 替换a为A,只替换一次
步骤1-3(即:a;N;$!ba;)就是为了将filename全部内容读到模式空间中,然后再进行替换,这样替换就只会做一次。
N=3
第一个命令叫打点记数法,因为sed没有var++之类的操作来记数。
第二个命令和上面是一样的原理,全部读入文本后统一替换第3个匹配的内容。
N=last
第一个命令,没匹配到 /\n88/ 的内容就读取下一行,然后 ba 跳转去开始处,如果读取到88的行呢,就执行后面的 P;D 组合,D也有循环功能,一直把匹配 \n88 内容的第一行打印,删除,直到不匹配/\n88/(因为换行符已经被打印出去了,所以不再会匹配到 \n88),这时候才继续往下读,如果又读到88的行,那么又执行P;D循环,同上操作。一直到匹配到最后一个88的行,继续读取到末行时执行替换,N 因为没有下一行可读,所以会自动中止命令,因为没有 -n 参数会打印 pattern space 里的内容到屏幕,所以就不会再执行后面的 ba 避免了死循环,这样的用法只存在于 GNU sed ,大家注意。所以这整个流程只会替换最后一个88。
第二个命令和上面的一样,也是全部读进 pattern space 里,最后利用正则的贪婪替换掉最后一个88。
注意两者区别。
最新文章
- 安装和部署ZkeaCMS
- Xshell_Using X11 forwarding
- python 集合
- 如何使用CSL(翻译总结自TI官方文档)
- Uploadify 3.2 上传图片
- SyntaxHighlighter -- 代码高亮插件
- 怎样让老浏览器兼容html5新标签
- hadoop集群环境搭建准备工作
- jquery操作ajax返回的页面元素
- 霍尔开关MH253ESO在减压神器指尖手指陀螺中的作用
- Ubuntu on win10
- 【BZOJ4034】【HAOI2015】树上操作
- mssql sql server 系统更新,如何正确的增加表字段
- MyBatis - 8.MyBatis工作原理
- PHP01
- window.onload和jquery等待加载的区别
- springmvc接收数组方式总结
- ServiceFramework作为Java Web框架都有哪些不错的设计
- 【PAT】B1078 字符串压缩与解压(20 分)
- AT2046 Namori 图论