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

第二个命令

  1. :a 创建一个label a
  2. N 将下一行读入到pattern space
  3. $! 如果不是最后一行,ba跳转到label a处
  4. 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。

注意两者区别。

最新文章

  1. 安装和部署ZkeaCMS
  2. Xshell_Using X11 forwarding
  3. python 集合
  4. 如何使用CSL(翻译总结自TI官方文档)
  5. Uploadify 3.2 上传图片
  6. SyntaxHighlighter -- 代码高亮插件
  7. 怎样让老浏览器兼容html5新标签
  8. hadoop集群环境搭建准备工作
  9. jquery操作ajax返回的页面元素
  10. 霍尔开关MH253ESO在减压神器指尖手指陀螺中的作用
  11. Ubuntu on win10
  12. 【BZOJ4034】【HAOI2015】树上操作
  13. mssql sql server 系统更新,如何正确的增加表字段
  14. MyBatis - 8.MyBatis工作原理
  15. PHP01
  16. window.onload和jquery等待加载的区别
  17. springmvc接收数组方式总结
  18. ServiceFramework作为Java Web框架都有哪些不错的设计
  19. 【PAT】B1078 字符串压缩与解压(20 分)
  20. AT2046 Namori 图论

热门文章

  1. web前端知识总结
  2. 手把手教你学习R语言
  3. Codeforces 785E. Anton and Permutation
  4. CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义)
  5. Bootstrap & Font Awesome 学习笔记
  6. The folder is already a source folder
  7. 写给前端的Python依赖管理指北
  8. Django框架中,使用celery实现异步
  9. jquey 小记
  10. 雷林鹏分享:C# 结构(Struct)