感谢支持
我们一直在努力

Linux sed常规用法小结

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


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


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



  1. [root@localhost .shell]# cat orig.txt  

  2. id      name    price   address  

  3. ——————————–     

  4. 1       apple   $50     USA  

  5. 2       pear    $60     Canda  

  6. 3       pen     $1      China      

  7. ——————————–         

  8. total   $111  

  9. [root@localhost .shell]# cat append.txt   

  10. 4       apple   $50     USA  

  11. 5       $60     Canda  

  12. 6       pen     $1      China  

1、打印指定行



a)打印第一行



  1. [root@localhost .shell]# sed -n ‘1p’ orig.txt   

  2. id      name    price   address  

b)打印3-5行



  1. [root@localhost .shell]# sed -n ‘3,5p’ orig.txt   

  2. 1       apple   $50     USA  

  3. 2       pear    $60     Canda  

  4. 3       pen     $1      China  

c)打印最后一行



  1. [root@localhost .shell]# sed -n ‘$p’ orig.txt   

  2. total   $111  

d)打印所有行



  1. [root@localhost .shell]# sed -n ‘1,$p’ orig.txt   

  2. id      name    price   address  

  3. ——————————-  

  4. 1       apple   $50     USA  

  5. 2       pear    $60     Canda  

  6. 3       pen     $1      China  

  7. ——————————–  

  8. total   $111  

e)打印含有pen的行



  1. [root@localhost .shell]# sed -n ‘/pen/p’ orig.txt   

  2. 3       pen     $1      China  

f)从第一行开始打印,打印到第一个含有$行



  1. [root@localhost .shell]# sed -n ‘1,/\$/’p  orig.txt     

  2. id      name    price   address  

  3. ——————————-  

  4. 1       apple   $50     USA  

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



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

  2. 3  

  3. 4  

  4. 5  

  5. 7  

3、替换



a)把-替换为空



  1. [root@localhost .shell]# sed -e ‘s/-*//g’  orig.txt              

  2. id      name    price   address  

  3.   

  4. 1       apple   $50     USA  

  5. 2       pear    $60     Canda  

  6. 3       pen     $1      China  

  7.   

  8. total   $111  

b)把元数据$替换为¥



  1. [root@localhost .shell]# sed ‘s/\$/¥/g’ orig.txt          

  2. id      name    price   address  

  3. ——————————-  

  4. 1       apple   ¥50    USA  

  5. 2       pear    ¥60    Canda  

  6. 3       pen     ¥1     China  

  7. ——————————–  

  8. total   ¥111  

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



  1. [root@localhost .shell]# sed -e ‘s/-*//g’  -e ‘/^$/’d orig.txt   

  2. id      name    price   address  

  3. 1       apple   $50     USA  

  4. 2       pear    $60     Canda  

  5. 3       pen     $1      China  

  6. total   $111  

d)把含有total的行,替换为******



  1. [root@localhost .shell]# sed  ‘/total/c\******’ orig.txt     

  2. id      name    price   address  

  3. ——————————-  

  4. 1       apple   $50     USA  

  5. 2       pear    $60     Canda  

  6. 3       pen     $1      China  

  7. ——————————–  

  8. ******  

4、删除,删除前两行



  1. [root@localhost .shell]# sed ‘1,2d’ orig.txt   

  2. 1       apple   $50     USA  

  3. 2       pear    $60     Canda  

  4. 3       pen     $1      China  

  5. ——————————–  

  6. total   $111  

5、添加


a)在含有apple的行前插入一行 0       nothing   $5     USA



  1. [root@localhost .shell]# sed ‘/apple/i\0       nothing   $5     USA’ orig.txt    

  2. id      name    price   address  

  3. ——————————-  

  4. 0       nothing   $5     USA  

  5. 1       apple   $50     USA  

  6. 2       pear    $60     Canda  

  7. 3       pen     $1      China  

  8. ——————————–  

b)在含有pen的行后插入一行4       four   $5     USA



  1. [root@localhost .shell]# sed ‘/pen/a\4       four   $5     USA’ orig.txt                 

  2. id      name    price   address  

  3. ——————————-  

  4. 1       apple   $50     USA  

  5. 2       pear    $60     Canda  

  6. 3       pen     $1      China  

  7. 4       four   $5     USA  

  8. ——————————–  

  9. total   $111  

c)在含有pen的行后面追加append.txt 文件的内容



  1. [root@localhost .shell]# sed ‘/pen/r append.txt’ orig.txt   

  2. id      name    price   address  

  3. ——————————-  

  4. 1       apple   $50     USA  

  5. 2       pear    $60     Canda  

  6. 3       pen     $1      China  

  7. 4       apple   $50     USA  

  8. 5       $60     Canda  

  9. 6       pen     $1      China  

  10. ——————————–  

  11. total   $111  

6、导出文件



a)把含有$的行导出到out.txt文件中



  1. [root@localhost .shell]# sed -n ‘/\$/w out.txt’ orig.txt   

  2. [root@localhost .shell]# cat out.txt                        

  3. 1       apple   $50     USA  

  4. 2       pear    $60     Canda  

  5. 3       pen     $1      China  

  6. total   $111  

b)把含有apple的行输出到apple.txt文件中



  1. [root@localhost .shell]# sed -n ‘/apple/’p orig.txt > apple.txt  

  2. [root@localhost .shell]# cat apple.txt   

  3. 1       apple   $50     USA  

赞(0) 打赏
转载请注明出处:服务器评测 » Linux sed常规用法小结
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏