Linux三剑客之Sed

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux三剑客之Sed相关的知识,希望对你有一定的参考价值。

    sed(流编辑器)是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。

   

  •     执行流程:从文件中读取一行,处理一行,再读取一行,再处理一行,如此反复,按行处理;sed默认匹配所有行。

主要参数:

    -i  修改。

    -n  取消默认输出 配合p使用。

    -r  支持扩展正则表达式

  •     Script:

              1a   追加(指定行的下一行追加内容)

              2i       插入(指定行的上一行插入内容)

              3d   删除

              4p      打印

              5c  用新行内容取代旧行内容

              6s  替换,搭配g全局替换


  • 语法

语法

含义

10  {script}

对指定行处理

10,20  {script}

对第1020行处理,包括第1020

10,+20  {script}

对第1030行处理,包括第1030

1~2  {script}

135等奇数行进行处理

10,$  {script}

对第10行到最后一行尽心出力

/oldboy/  {script}

对匹配oldboy的行进行处理

/oldboy/,/alex/  {script}

oldboyalex之间的行进行处理

/oldboy/,${script}

oldboy到最后一行进行处理

1,/oldboy/  {script}

对地一行到匹配oldboy的行进行处理

/oldboy/,+2  {script}

oldboy之后对两行进行处理

 

实例:

  •    追加文本到指定行后

[[email protected] ~]# sed ‘2a 106,dandan,CSO‘ person.txt

101,oldboy,CEO

102,zhangyao,CTO

106,dandan,CSO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

  • 插入文本到指定行前

[[email protected] ~]# sed ‘2i 106,dandan,CSO‘ person.txt

101,oldboy,CEO

106,dandan,CSO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

  • 多行追加

[[email protected] ~]# sed ‘2a 106,dandan,CSO\n107,bingbing,CCO‘person.txt  通过\n元字符达到

101,oldboy,CEO

102,zhangyao,CTO

106,dandan,CSO

107,bingbing,CCO

103,Alex,COO

104,yy,CFO

105,feixue,CIO


  • 删除指定行

删除第二行

[[email protected] ~]#sed ‘2d‘ person.txt

101,oldboy,CEO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

删除第25

[[email protected] ~]#sed ‘2,5d‘ person.txt

101,oldboy,CEO                                                                           

删除第3行到最后一行

[[email protected] ~]#sed ‘3,$d‘ person.txt

101,oldboy,CEO

102,zhangyao,CTO

删除包含"oldboy"的行

[[email protected] ~]#sed ‘/oldboy/d‘ person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

  • 取代  

新行取代原来的行

将第二行内容取代为指定的内容

[[email protected] ~]#sed ‘2c 106,dandan,CSO‘person.txt

101,oldboy,CEO

106,dandan,CSO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

  • 替换

1[[email protected] ~]# sed‘s#zhangyao#oldboyedu#g‘ person.txt    zhangyao更改oldboyedu

101,oldboy,CEO

102,oldboyedu,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

  • 特殊符:& 代表被替换的内容

13行的C替换为--C--

[[email protected] ~]#sed ‘1,3s#C#--&--#g‘ person.txt        &等于C

101,oldboy,--C--EO     

102,zhangyao,--C--TO

103,yy,--C--OO

104,feixue,CFO

105,dandan,CIO

  • 查询

查询第二行

[[email protected] ~]#sed -n ‘2p‘ person.txt

102,zhangyao,CTO

 

第二行到第三行

[[email protected] ~]#sed -n ‘2,3p‘ person.txt

102,zhangyao,CTO

103,Alex,COO

 

查询第135奇数行

[[email protected] ~]#sed -n ‘1~2p‘ person.txt

101,oldboy,CEO

103,Alex,COO

105,feixue,CIO

 

查询包含CTO的行

[[email protected] ~]#sed -n ‘/CTO/p‘ person.txt

102,zhangyao,CTO

 

查询从CTOCFO之间的行

[[email protected] ~]#sed -n ‘/CTO/,/CFO/p‘ person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO



以上是关于Linux三剑客之Sed的主要内容,如果未能解决你的问题,请参考以下文章

Linux三剑客之grepegrep及正则表达式使用详解

linux三剑客之sed史上最实用教程!

linux文本处理三剑客之grep

linux三剑客之老三-grep

Linux文本处理三剑客之grep

Linux三剑客之grep