理解功能强大的sed替换命令

最近仔细看了一下sed命令,不得不感慨sed的强大功能,感觉能写半本书了。这能总结一些最常用的。

替换并打印在屏幕上

最常用的就是替换功能。
sed 's/foo/bar/g'
这条命令都比较熟,就是把所有foo替换成bar,但是前面的s和后面的g是什么意思?
更一般的写法其实是
sed 's/regrexp/replacement/g'
s表示后面跟的是一个正则表达式regrexp,我们这里的正则表达式简化为一个单词foo,但是sed其实是支持正则表达式的。后面跟的g相当于Word里面的替换所有
以下面的文本为例,

 This is the first apple. This is the second apple. This is the third apple.
 This is the forth apple.
 This is the fifth apple.

sed 's/apple/APPLE/g' test.txt

This is the first APPLE. This is the second APPLE. This is the third APPLE.
This is the forth APPLE.
This is the fifth APPLE.

sed 's/apple/APPLE/3' test.txt

只有某一行的apple出现第3次时,才会被替换掉。
This is the first apple. This is the second apple. This is the third APPLE.
This is the forth apple.
This is the fifth apple.
  • 以上命令会将替换结果打印到屏幕上,不会改变文件本身
  • 整个文件都会被打印出来,包括被替换和没被替换的部分。可以加上-n命令使用静默模式,不过-n命令本身也有复杂的用法,这里就不介绍

多条命令同时执行

很多教程在介绍 -e参数时候说,这个命令加不加结果都一样。这属于理解有误,如果加不加都一样,这个参数就没有存在的必要了。正确的说法是,如果一次只执行一条sed命令,加不加-e参数没有区别

-e参数的作用就是让你可以按顺序执行多条命令,比如
sed -e 's/apple/APPLE/g' -e 's/APPLE/ORANGE/3' test.txt
输出的结果是

This is the first APPLE. This is the second APPLE. This is the third ORANGE.
This is the forth APPLE.
This is the fifth APPLE.

上面这条命令首先把所有apple都替换成APPLE,然后把每行出现第3次的APPLE替换成ORANGE。

替换并修改源文件

以上所有操作只是把替换后的结果打印在屏幕上,并不会修改源文件。如果想要修改源文件,需要在命令前面加上-i参数。保险起见,加-i参数前最好先打印预览一下结果。

原文地址:https://www.cnblogs.com/yaos/p/14014478.html