sed是一个非交互性的流编辑器,是stream editor的缩写。sed每次只处理一行内容,可以对文本或标准输入流进行处理。需要注意的是,sed并不直接操作初始数据,它操作的是一份原始数据的拷贝。sed处理时,把当前处理的行存储在临时缓冲区中,然后处理缓冲区中的内容,处理完成后,如果没有重定向到文件, 将把缓冲区中的内容送往屏幕,接着处理下一行直到处理完毕。
理论的东东,这里不谈了,下面谈些常规应用吧。
在演示之前,我们先构筑个初始文件orig.txt 和append.txt
- [root@localhost.shell]#catorig.txt
- idnamepriceaddress
- --------------------------------
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- --------------------------------
- total$111
- [root@localhost.shell]#catappend.txt
- 4apple$50USA
- 5$60Canda
- 6pen$1China
1、打印指定行
a)打印第一行
- [root@localhost.shell]#sed-n'1p'orig.txt
- idnamepriceaddress
b)打印3-5行
- [root@localhost.shell]#sed-n'3,5p'orig.txt
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
c)打印最后一行
- [root@localhost.shell]#sed-n'$p'orig.txt
- total$111
d)打印所有行
- [root@localhost.shell]#sed-n'1,$p'orig.txt
- idnamepriceaddress
- -------------------------------
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- --------------------------------
- total$111
- [root@localhost.shell]#sed-n'/pen/p'orig.txt
- 3pen$1China
f)从第一行开始打印,打印到第一个含有$行
- [root@localhost.shell]#sed-n'1,/\$/'porig.txt
- idnamepriceaddress
- -------------------------------
- 1apple$50USA
2、打印含有元数据$行的行号
- [root@localhost.shell]#sed-n'/\$/='orig.txt
- 3
- 4
- 5
- 7
3、替换
a)把-替换为空
- [root@localhost.shell]#sed-e's/-*//g'orig.txt
- idnamepriceaddress
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- total$111
b)把元数据$替换为¥
- [root@localhost.shell]#sed's/\$/¥/g'orig.txt
- idnamepriceaddress
- -------------------------------
- 1apple¥50USA
- 2pear¥60Canda
- 3pen¥1China
- --------------------------------
- total¥111
c)-替换为空,并删除空行
- [root@localhost.shell]#sed-e's/-*//g'-e'/^$/'dorig.txt
- idnamepriceaddress
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- total$111
d)把含有total的行,替换为******
- [root@localhost.shell]#sed'/total/c\******'orig.txt
- idnamepriceaddress
- -------------------------------
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- --------------------------------
- ******
4、删除,删除前两行
- [root@localhost.shell]#sed'1,2d'orig.txt
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- --------------------------------
- total$111
5、添加
a)在含有apple的行前插入一行 0 nothing $5 USA
- [root@localhost.shell]#sed'/apple/i\0nothing$5USA'orig.txt
- idnamepriceaddress
- -------------------------------
- 0nothing$5USA
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- --------------------------------
b)在含有pen的行后插入一行4 four $5 USA
- [root@localhost.shell]#sed'/pen/a\4four$5USA'orig.txt
- idnamepriceaddress
- -------------------------------
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- 4four$5USA
- --------------------------------
- total$111
c)在含有pen的行后面追加append.txt 文件的内容
- [root@localhost.shell]#sed'/pen/rappend.txt'orig.txt
- idnamepriceaddress
- -------------------------------
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- 4apple$50USA
- 5$60Canda
- 6pen$1China
- --------------------------------
- total$111
6、导出文件
a)把含有$的行导出到out.txt文件中
- [root@localhost.shell]#sed-n'/\$/wout.txt'orig.txt
- [root@localhost.shell]#catout.txt
- 1apple$50USA
- 2pear$60Canda
- 3pen$1China
- total$111
b)把含有apple的行输出到apple.txt文件中
- [root@localhost.shell]#sed-n'/apple/'porig.txt>apple.txt
- [root@localhost.shell]#catapple.txt
- 1apple$50USA