sed [OPTION]… {script-only-if-no-other-script} [input-file]…
sed:stream editor流编辑器的简称,可以用来过滤和转换文本,以下是一些常用示例。假设,我们有文本file.txt内容如下:
- 字符替换操作
s表示替换操作,默认情况下,sed只替换每行首次出现的匹配字串,所以在上面的示例中,第一行中的第二个和第三个unix没有被替换。
2.替换某一行中第几次出现的字串
使用/1,/2等标识,指定替换某一行中第几次出现的匹配字串,比如,本示例中使用/2,表示替换每一行中第二次匹配的字串。
3.替换匹配字串
使用*/g*标识
4.替换每一行中第几次开始出现到每一行结束的所有匹配字串
使用/1,/2等以及/g标识,本例中,我们指定替换每一行中从第三次匹配到行尾的所有匹配字串。
5.使用其他分隔符
默认情况下,我们使用反斜杠*/*作为分隔符,比如替换url地址中的协议头:
sed 's/http:\/\//www/' file.txt
这种情况下,字串包含了我们的分隔符,如果要正确的使用sed命令,我们需要对字串中的分隔符关键字进行转义,这样做的话,代码既不美观而且可读性也比较差,因此,我们可以通过修改分隔符的方式实现。
比如使用下划线
sed 's_http://_www_' file.txt
还可以使用竖线分隔符
sed 's|http://|www|' file.txt
6.使用&符号作为匹配字串
比如,如果我们需要查找某些匹配字串,并且对应匹配的字串前后增加一些其他的字符,这时候,我们就可以使用*&*符号
7.使用\1,\2等标识
模式中,第一对括号用\1表示,以此类推,比如,你想替换某个字串两次,那么可以使用如下方式:
比如,前后两个字符交换位置
或者,交换每一行中前三个字符的顺序:
8.重复打印替换行
你可以使用/p来重复打印替换行,如果某一行存在匹配字串,那么*/p*参数会在终端重复打印替换后的内容,如果当前行不存在匹配字串,没有进行替换操作,那么仅打印一次原来的内容。
9.只打印替换后的内容
使用*-n*参数,接例8,如果我们只想打印显示替换后的内容,那么我们可以通过指定**-n**参数来实现。
10.同时执行多个sed命令
方式一,前者的输出作为后者的输入。
方式二,使用**-e**参数
11.对指定行进行字串替换
只对第三行执行字串替换
12.只对特定范围的字串进行替换
只对第一到第三行的内容执行字符替换操作
从第二行开始直到文件最后一行
13.匹配行上进行替换
首先指定一个匹配模式,如果当前行存在匹配字串,则将当前行中的A替换为B,下图示例中,如果当前行中存在linux字串,则将该行中的unix替换为centos
14.删除行
可以删除指定行或者多行
15.复制行
使用/p
16.作为grep命令
17.匹配行后添加一行
使用a
- 匹配行前添加一行
使用i
19.替换某一行
使用c
20.字符转换操作,类似tr操作
使用/y
https://www.folkstalk.com/2012/01/sed-command-in-unix-examples.html