文本处理工具之SED流编辑器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本处理工具之SED流编辑器相关的知识,希望对你有一定的参考价值。

文本处理三剑客之SED(流编辑器)

sed的工作方式:在指定文件中,按行读取内容至模式空间,然后根据sed的scripts编辑改行内容,编辑完毕后输出至屏幕,再读取下一行进行处理。如果有该行内容未被处理完毕就有新的内容要进行编辑,则把该行内容移至保持空间中,,保持空间中的内容可以随时调回模式空间中。

sed的使用

使用格式:sed [options...] ‘scipts‘ file

  • 常用选项:
  • -n:不输出模式空间中的内容至标准输出(不自动打印)
  • -e script:多点编辑
    sed -e ‘[email protected]^#[[:space:]]@[email protected]‘ -e ‘/^UUID/‘ /etc/fatab
  • -f sed_script_fie:调用sed的编辑脚本文件(文件中每行一个编辑脚本)
  • -r:支持使用扩展正则表达式
  • -i:直接编辑源文件
  • -i.bak:备份源文件并在原文编辑

地址定界机制:

  • 空地址:对全文进行处理
    1. 单地址
      • #:指定第#行
      • $:最后一行
      • /pattern/:被此模式所匹配到的行
    2. 地址范围:
      • #,#:第#行到第#行
      • #,+#:第#行到#+#行
      • #,/pattern/:第#行到被模式匹配到的行
      • /pattern1/,/pattern2/:第一次被模式1匹配到的行到第一次被模式2匹配到的行
    3. 步进:~
      • 1~2:所有奇数行
      • 2~2:所有偶数行

        编辑命令:

  • d:删除
  • p:显示模式空间中的内容
  • a \test:在行后面追加文本“test”,支持使用\n实现多行追加
  • i \test:在行前面追加文本“test”支持使用\n实现多行追加

    追加的时候,要插入变量使用‘‘‘$变量‘‘‘

  • c \test:把匹配到的行替换为此处指定的文本
  • w file:保存模式空间中的内容至文件中,相当于重定向
  • r file:读取指定文件中的内容自己当前文件被模式匹配的行的后面
  • =:为模式匹配到的行打印行号
  • !:条件取反
  • s///:查找替换,其分隔符可自定义,常用的有[email protected]@@,s###等

    替换标记:

    • g:全局替换
    • w file:将替换完的结果保存到指定文件中
    • p:显示替换成功的行
      支持使用\1,\2...后向引用,&表示全面搜索到的全部内容

练习

  • 删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;
    ~]# sed ‘[email protected]^[[:space:]][email protected]@‘ /etc/grub2.cfg
    1. 删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
      ~]# sed ‘[email protected]^#[[:space:]]*@@‘ /etc/fstab
    2. 在/etc/grub2.cfg文件中包含linux16的行的行尾加上net.ifnames=0
      sed -nr ‘/linux16/s/.*/& net.ifnames=0/p‘ /etc/grub2.cfg

      sed的高级编辑命令:

  • h:把模式空间中的内容覆盖至保持空间中
  • H:把模式空间中的内容追加至保持空间中
  • g:把保持空间中的内容覆盖至模式空间中
  • G:把保持空间中的内容追加至模式空间中
  • x:把模式空间中的内容与保持空间中的内容互换
  • n:覆盖读取匹配到的行的下一行到模式空间中
  • N:追加读取匹配到的行的下一行到模式空间中
  • d:删除模式空间中的行
  • D:删除多行模式空间中的开始到\n的行

    示例:

    1. sed -n ‘n;p‘ FILE:显示偶数行;
    2. sed ‘n;d‘ FILE:显示奇数行;
    3. sed ‘1!G;h;$!d‘ FILE:逆序显示文件的内容; 等价于sed -n ‘1!G;h;$p‘
    4. sed ’$!d‘ FILE:取出最后一行;
    5. sed ‘$!N;$!D‘ FILE:取出文件后两行;
    6. sed ‘N;D‘:取出最后一行;
    7. sed ‘/^$/d;G‘ FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;
    8. sed ‘G‘ FILE:在原有的每行后方添加一个空白行;

以上是关于文本处理工具之SED流编辑器的主要内容,如果未能解决你的问题,请参考以下文章

文本处理三剑客之sed流编辑器

第十八章 文本处理流编辑器:sed命令

文本处理工具之sed

shell正则表达式:sedawk 之文本三剑客其二

文本处理三剑客之SED

Linux文本处理三剑客之---sed