追加、更改、插入编辑命令
追加(a)、更改(c)、插入(i)命令在sed中并不常用,因为它们必须在多行上来指定。语法如下:
[line-address]a\
text
[line-address]i\
text
[line-address]c\
text
追加命令将文本放置在当前行之后,更改命令(c)用所指定的文本取代模式空间(模式空间概念可以网上找下博客)的内容,插入指令将所提供的文本放置在模式空间的当前行之前,这些命令都要求后面跟一个反斜杠用于转义第一个行尾,text必须从下一行开始。如果要输入多行文本,每个连续的行都必须用反斜杠结束,最后一行除外,而且当文本包含一个字面含义的反斜杠时,需要再添加一个反斜杠来转义,如下
#待处理的文本at.txt
<Amy's info>
<Tom's info>
#sed脚本
/<Tom's info>/a\
full name : zhangsan
tel:123456
#使用sed命令处理文本
[root@test ~]# sed -f sed.txt at.txt
#因为没有在文本第一行后面加\,所以需要在full name : zhangsan后面加\
sed: can't find label for jump to `el:123456'
[root@test ~]# vi sed.txt
[root@test ~]# sed -f sed.txt at.txt
<Amy's info>
<Tom's info>
full name : zhangsan
tel:123456
还可以指定在文件结尾处追加一行”any text”
[root@test ~]# cat at.txt
<Amy's info>
<Tom's info>
[root@test ~]# sed '$a"any text"' at.txt
<Amy's info>
<Tom's info>
"any text"
上述命令的$是行寻址符号,用于匹配文件的最后一行。
追加命令和插入命令只应用于单个行地址,而不是一个范围内的行,更改命令可以处理一个范围内的行。使用我们提供的文本替换被寻址行的内容,也就是删除原来行内的内容替换为我们自己的内容。
#待处理的文本at.txt
From:zhangsan@163.com
To:test
Subject:Test
#sed脚本,从FROM开头的文本到行尾替换为<Mail Header Removed>
/^From/,/^$/c\
<Mail Header Removed>
#执行sed脚本
[root@test ~]# sed -f sed.txt at.txt
<Mail Header Removed>
To:test
Subject:Test
|