TangWei's Studio

文本三剑客之sed

Word count: 1,076 / Reading time: 4 min
2018/04/15 Share

我们知道,sed被称为Linux中被称为文本处理三剑客之一,相比于grep命令匹配内容的功能,sed则能够做到对匹配到的文本内容对其进行编辑。

强大的处理文本的工具sed

我们知道,sed被称为Linux中被称为文本处理三剑客之一,相比于grep命令匹配内容的功能,sed则能够做到对匹配到的文本内容对其进行编辑。

一.sed,英文全称Stream EDitor,翻译过来就是行编辑器

1.用法

1
sed[option]…’script’ inputfile…

其中‘script’可表示为’地址定界+编辑命令’

2.option

  • -n 取消默认打印内容到屏幕(示例1)

  • -e 多点编辑,表达且关系,与grep的-e不同,grep -e表达或关系(示例2)

  • -f 从指定文件中读取编辑脚本(示例3)

  • -r 支持使用扩展正则表达式

  • -i.bak 原处编辑,并备份文件file.bak(示例4)

3.地址定界:

  • (1)不给地址:对全文进行处理
  • (2)单地址:#:指定的行,$:最后一行
    /pattern/:支持正则表达式,被此模式所能匹配到的每一行

  • (3)地址范围:
    #,# (示例5)
    #,+#
    /pat1/,/pat2/ (示例6)
    /pat1/, # (示例7)

  • (4)~:步进
    1~2 奇数行 (示例5)
    2~2 偶数行

4.编辑命令:

  • d 删除模式空间匹配的行(示例4)

  • p 打印当前模式空间内容,追加到默认输出之后(示例1)

  • a[]text 在指定行后面追加文本(示例4)
    如要实现插入内容空格开头可先追加\再输入空格
    支持使用\n实现多行追加(示例8)

  • i[]text 在指定行前面插入文本(示例9)

  • c[]text 替换指定行尾单行或多行文本(示例10)

  • w /path/somefile 保存模式匹配的行到指定文件(示例11)

  • r /path/somefile 读取指定文件的文本匹配的行后(示例12)

注意:w,r后跟文件一定要加空格

可利用此命令定义别名到.bashrc

  • = 为模式空间中的行打印行号

  • ! 取反,!需加载地址定界和编辑命令中间,如’2!d’(示例13)

  • s///:查找替换,支持使用其他分隔符;s###;s@@@(示例14)

二.示例

以下我们创建文件test进行示例:

enter image description here

示例1:sed ‘1,10p’ /data/test.sed

sed命令默认将文本内容打印到屏幕,由于执行命令p,文本内容被打印了两遍

enter image description here

1
sed  -n  ‘1,10p’ /data/test.sed

sed -n选项将取消默认输出到屏幕,仅显示p的执行结果

enter image description here

示例2:sed -n -e ‘1p’ -e ‘3p’

显示第一行和第三行,-e表示且的关系

enter image description here

示例3:sed -n -f sedscripts.txt /data/test.sed

将2,5p写入sedscripts.txt文件,-f选项读取sedscripts.txt,并执行文件中内容

enter image description here

示例4:sed -i ‘1,10a#’ /data/test.sed

表示在第1至第10行内容后插入#,-i选项直接编辑了test.sed的文本内容

enter image description here

1
sed -i  ‘/#/d’  /data/test.sed

表示将所有带#的行删掉并编辑文本

enter image description here

示例5:sed -n ‘3p’ 打印第3行内容

sed -n ‘2,5p’ 打印第2至第五行

sed -n ‘2,+3p’ 打印第2至第5行

sed -n ‘1~2p’ 打印奇数行

sed -n ‘2~2p’ 打印偶数行

enter image description here

示例6:正则定界,表示ifconfig命令输出中开头eth2的行,至开头为lo的行

enter image description here

示例7:正则数字混合定界,表示ifconfig命令输出中,eth2开头的行到第12行的内容

enter image description here

示例8:多行插入,将aaa\nbbb插入到每行后面

enter image description here

示例9:sed ‘1,10i#’ /data/test.sed

在每一行上面插入#

enter image description here

示例10:sed ‘1,5c’ /data/test.sed

将test.sed文件中1到5行替换为一个#

enter image description here

示例11:sed ‘2,5w f1’ /data/test.sed

将test.sed文件中第2到第5行内容打印到f1文件中
enter image description here

示例12:sed ‘2,5r f1’ /data/test.sed

将f1的内容插入到第2至第5行

enter image description here

示例13:sed -n ‘2,5! p’ /data/test.sed

打印除了第2至第5行的内容

enter image description here

示例14:ifconfig |sed -n “2p”|sed -r “s@.*addr:(.*) Bcast.*@\1@”

利用搜索替代,我们可以将任意段字符串定义成方法,然后表示出整行,再利用后向引用即可取出该字符串。

enter image description here

CATALOG
  1. 1. 强大的处理文本的工具sed
    1. 1.1. 一.sed,英文全称Stream EDitor,翻译过来就是行编辑器
      1. 1.1.1. 1.用法
      2. 1.1.2. 2.option
      3. 1.1.3. 3.地址定界:
      4. 1.1.4. 4.编辑命令:
    2. 1.2. 二.示例
      1. 1.2.1. 示例1:sed ‘1,10p’ /data/test.sed
      2. 1.2.2. 示例2:sed -n -e ‘1p’ -e ‘3p’
      3. 1.2.3. 示例3:sed -n -f sedscripts.txt /data/test.sed
      4. 1.2.4. 示例4:sed -i ‘1,10a#’ /data/test.sed
      5. 1.2.5. 示例6:正则定界,表示ifconfig命令输出中开头eth2的行,至开头为lo的行
      6. 1.2.6. 示例7:正则数字混合定界,表示ifconfig命令输出中,eth2开头的行到第12行的内容
      7. 1.2.7. 示例8:多行插入,将aaa\nbbb插入到每行后面
      8. 1.2.8. 示例9:sed ‘1,10i#’ /data/test.sed
      9. 1.2.9. 示例10:sed ‘1,5c’ /data/test.sed
      10. 1.2.10. 示例11:sed ‘2,5w f1’ /data/test.sed
      11. 1.2.11. 示例12:sed ‘2,5r f1’ /data/test.sed
      12. 1.2.12. 示例13:sed -n ‘2,5! p’ /data/test.sed
      13. 1.2.13. 示例14:ifconfig |sed -n “2p”|sed -r “s@.*addr:(.*) Bcast.*@\1@”