sed是stream editor 流编辑器的偶写,是文本处理中非常重要的工具,可以完美的配合正则表达式使用,进行文本替换

sed ‘s/pattern/replace_string/’ file

cat file | set ‘s/pattern/replace_string/’

使用-i可以将替换的结果应用到源文件中

一般的使用者,会在替换完成后利用重定向来保存文件

sed ‘s/text/replace/’ file > newfile

mv newfile file

两者结合起来,只需要一行命令就可以搞定

sed -i ‘s/text/replace/’ file

我们这个替换,是替换每一行的第一处符合样式的内容,如果需要替换所有的符合内容,需要在命令尾部加上g参数

sed ‘s/pattern/replace_string/g’ file

后缀 /g意味着sed会替换每一处匹配

但是有时候需要跳过一些匹配,多以可以加上数字,来指定先忽略多少处匹配

图片

需要从第N处开始匹配,就使用/Ng

字符 /在sed中作为定界符使用,可以像是下面一样使用任意的定界符

sed ‘s:text:replace:g’

sed ‘s|text|replace|g’

如果需要删除某些匹配字段的话

需要在后面加上d来进行表示删除操作

比如移除所有的空白行

sed ‘/^$/d’ file

/pattern/d会移除匹配样式的行

已经匹配的字符串标记&

用&标记匹配了的

例如

$echo this is an example | sed ‘s/\w\+[&]/g’

\w\表示匹配每一个单词,然后我们 [&] 替换它, &对于之前所匹配的单词

子串匹配标记\1

& 代表匹配给定样式的字符串,但我们可以匹配给定的样式的其中一部分

echo this is digit 7 in a number |sed ‘s/digit\ ([0-9]\)/\1/’

“s/digit \([0-9]\)/\1/”

this is 7 in a number

将\1表示的第一个子串,如果匹配了第二个子串,就是\2

比如下面的多个匹配,就是

echo seven EIGHT |sed ‘s/\([a-z]\+\)\([A-Z]\+\)/\2 \2/’

EIGHT seven

([a-z]\+\) 匹配了第一个单词,([A-Z]\+\) 匹配第二个单词, \1 \2来进行引用,这种引用称为向后引用 back referencing

搭配使用

使用多个sed命令来进行代替

sed ‘expression’ | sed ‘expression’

等价于

sed ‘expression; expression’

单引号配合sed来使用,说明是单纯的字符使用,如果是双引号的话,可以在sed表达式中使用一些变量,那么双引号就可以使用了

$text=hello

echo hello world | sed “s/$text/HELLO/”

发表评论

邮箱地址不会被公开。 必填项已用*标注