Shell脚本学习笔记——sed

sed是一种流编辑器,它是文本处理中的工具,能够完美的配合正则表达式使用。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲器中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

sed默认按照Basic规范基本匹配。


  • 命令格式

sed  [options]  'command'  file(s)

sed  [options]  -f  scriptfile  file(s)


  • 常见基本使用

(1)/pattern/p:打印匹配pattern的行。


使用p命令需要注意,sed是把待处理文件的内容连同处理结果一起输出到标准输出的,因此p命令表示除了把文件内容打印出来之外还额外打印一遍匹配pattern的行。要想只输出处理结果,应加上-n选项,这种用法相当于grep命令。


(2)/pattern/d:删除匹配pattern的行。


注意,sed命令不会修改原文件,删除命令只表示某些行不打印输出,而不是从原文件中删去。若要影响源文件,需要使用-i选项。



(3)/pattern/pattern1/pattern2/:查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2。使用sed,注释C代码当中所有的printf。



(4)/pattern/s/pattern1/pattern2/g:查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2。

那么同样是替换,带g或者不带g有什么区别呢?


这样一对比,区别就一目了然了。另外,还有另外一种写法:


可以在pattern2中使用&代替pattern1。


(5)子串匹配标记\1,\2...\n


\(..\)用于匹配子串,对于匹配到的第一个字串就标记为\1,依此类推,匹配到的第二个结果就是\2,我们通过对标签进行重组,从而完成数组逆置。


  • 退出状态
退出状态sed不像grep一样,不管是否找到指定的模式,它的退出状态都是0.只有当命令存在语法错误时,sed的退出状态才不是0。



猜你喜欢

转载自blog.csdn.net/cecilia3333/article/details/80766512