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