最近仔细看了一下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
参数前最好先打印预览一下结果。