(1). 替换给定文本中的字符串
$ sed 's/pattern/replace_string/' filename
或者
$ cat file | sed 's/pattern/replace_string/'
(2). -i 保存替换
默认情况下,sed命令只会打印替换后的文本,如果需要在替换的同时保存更改,可以使用-i选项。
$ sed -i 's/text/replace/' file
(3). 之前的sed命令只会替换每行的第一处匹配的内容,若果要替换所有内容需要在命令尾部加参数g
$ sed 's/pattern/replace_string/g' file
若果需要从第n处匹配开始替换,可以使用/Ng选项
$ echo thisthisthisthis | sed 's/this/THIS/2g'
thisTHISTHISTHIS
===============================================================================
1. 移除空白行
空白行可以用正则表达式 ^$ 进行匹配
$ sed '/^$/d' file
'pattern/d' 会移除匹配样式的行,在空白行中,行尾标记紧跟在行首标记后
2. $ sed -i .bak 's/pattern/replace/g' file
此时的sed不仅会执行替换,还会创建一个file.bak文件,包含原始文件内容。
3. 已匹配字符串标记(&)
在sed中,我们可以用 &标记匹配样式的字符串,这样就能够在替换字符串时使用已匹配的内容。
$ echo this is an example | sed 's/\w\+/[&]/g'
[this] [is] [an] [example]
正则表达式 \w\+ 匹配每一个单词,然后我们用[&]替换它。& 对应于之前所匹配到的单词。
4. 子串匹配标记
$ echo seven EIGHT | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
EIGHT seven
([a-z]\+\)匹配第一个单词,([A-Z]\+\)匹配第二个单词。\1和\2用来引用它们。这种引用
被称为向后引用(back reference)。在替换部分,它们的次序被更改为\2 \1,因此结果就呈现
出逆序的形式。