红联Linux门户
Linux帮助

Linux sed常规用法小结

发布时间:2014-11-23 21:48:27来源:linux网站作者:linux人

sed是一个非交互性的流编辑器,是stream editor的缩写。sed每次只处理一行内容,可以对文本或标准输入流进行处理。需要注意的是,sed并不直接操作初始数据,它操作的是一份原始数据的拷贝。sed处理时,把当前处理的行存储在临时缓冲区中,然后处理缓冲区中的内容,处理完成后,如果没有重定向到文件, 将把缓冲区中的内容送往屏幕,接着处理下一行直到处理完毕。

理论的东东,这里不谈了,下面谈些常规应用吧。


在演示之前,我们先构筑个初始文件orig.txt 和append.txt

[root@localhost .shell]# cat orig.txt 
id  nameprice   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  nameprice   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  nameprice   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  nameprice   address 
------------------------------- 
1   apple   $50 USA


2、打印含有元数据$行的行号

[root@localhost .shell]# sed -n '/\$/=' orig.txt



7
 

3、替换

a)把-替换为空

[root@localhost .shell]# sed -e 's/-*//g'  orig.txt 
id  nameprice   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  nameprice   address 
------------------------------- 
1   apple   ¥50USA 
2   pear¥60Canda 
3   pen ¥1 China 
-------------------------------- 
total   ¥111 

c)-替换为空,并删除空行

[root@localhost .shell]# sed -e 's/-*//g'  -e '/^$/'d orig.txt  
id  nameprice   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  nameprice   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  nameprice   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  nameprice   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  nameprice   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