sed简述

  • sed(流编辑器),行编辑器,可以接收标准输入来的数据
    • 处理机制(先读入再匹配,匹配到了再处理):先将文本的每一行,一行行的读入到内存,如果该行符合模式空间的模式匹配,就用sed命令处理缓冲区中的内容,这段内存空间叫sed的模式空间,处理完成后,把缓冲区的内容送往屏幕。sed的默认功能就是输出模式空间的内容到标准输出,默认不编辑原文件,仅对模式空间中的副本处理,没有匹配到的行直接输出到标准输出,sed还有一段空间就是保持空间。
    • Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作
    • 格式:sed [OPTION]…ADDRESSCOMMAND;ADDRESSCOMMAND;…’ [INPUT-FILE]…(双引号单引号都行,需要变量替换用双引号)
      • OPTION:
        • -n:静默模式,不再默认输出模式空间中的内容到屏幕,即不自动打印
        • -i:直接修改原文件,这个选项具有风险,建议使用的时候-i.STRING 这样先做一个.STRING的备份文件,再处理文件后
          • sed  -i.bak  ‘10d’f2    将f2先备份为bak,然后再对f2修改
        • -e ADDRESSCOMMAND-e ADDRESSCOMMAND可以同时执行多个匹配操作
          • 例:sed -e ‘ADDRESSCOMMAND’FILE  -e  ‘ADDRESSCOMMAND’ FILE
        • -f /路径/script:从指定文件中读取地址命令,来处理文件
          • 如:sed -f /路径/script  FILE
        • -r:表示使用扩展正则表达式,不跟-r就是基本的正则表达式
      • ADDRESSCOMMAND由地址和命令组合而成,连续写无分割
        • 地址ADDRESS,默认对全文处理
          • 单地址:
            • #:指定的行
            • /PATTERN/:被此处模式匹配到的每一行
          • 地址范围:
            • ##或者 #,+# 或者 /PAT1/,/PAT2/ 或者 #,/PAT1/
              • #,# :表示 # 到 # 的行
              • #,+# :表示从 # 行开始加 # 行,之间的行
              • /PAT1/,/PAT2/:表示第一次被模式1匹配到的行开始,到第一次被模式2匹配到的行结束,这中间的所有行
            • $:最后一行
              • 例:sed ‘1,2d’FILE   例:sed ‘1d’ dping.txt  例:sed ‘1,+3d’ dping.txt
            • 步进:~
              • 1~2:所有奇数行;2~2:所有偶数行
            • 命令COMMAND
              • d:删除模式空间中符合条件的行
              • p:打印模式空间符合条件的行
                • 例:sed ‘/^\//p’ /etc/fstab
              • a [\]STRING在指定的行后面追加新行,内容为字符串,\n:可以换行
                • 例:sed ‘/^\//a \# hello1\n# hello2’ /etc/fstab
              • i [\]STRING:在指定的行前面添加新行,内容为字符串,支持\n
              • r FILE将指定的文件内容添加到符合条件的行后
              • w FILE将符合条件的行写到指定的文件里
              • !条件取反,格式:ADDRESS!COMMAND
              • c [\]STRING 把匹配到的行,整行都替换为此处指定的STRING
              • =: 为模式空间中的行打印行号
              • !: 模式空间中匹配行取反处理
              • s/PATTERN(正则表达式)/STRING(不支持正则,仅为字符串)/修饰符:查找替换,将PATTERN匹配到的内容替换为STRING,默认只替换每行中第一次被模式匹配到的字符串。同vim编辑器
              • 分隔符不仅限于/还可以:s###,s@@@
                • 修饰符:
                  • g:全局替换
                  • p:显示替换成功的行
                  • i:忽略字符大小写
                  • w FILE:将替换成功的结果保存到指定的文件中
                  • &:引用之前的匹配的整个字符串
                  • \(\),\1,\2:\1表示引用第一处括号内的内容,\2表示第二处,基本正则\(\),扩展正则()
  • 和sed的保持空间相关的命令
    • h:把模式空间的内容覆盖到保持空间中
    • H:把模式空间中的内容追加到保持空间
    • g:把保持空间的内容覆盖到模式空间中
    • G:把保持空间的内容追加到模式空间中
    • x:把模式空间的内容与保持空间中的内容互换
    • n:读取匹配到的行的下一行覆盖到模式空间中
    • N:读取匹配到的行的下一行追加到模式空间中
    • D:删除多行模式空间中的所有行
      • sed -n ’n;p’ FILE 一开始sed默认匹配到第一行,然后将第一行读到模式空间,然后做命令处理,n将第一行的下一行覆盖至模式空间,覆盖之前第一行默认输出到标准输出,而由于-n所以不做输出,p打印出模式空间的内容,然后读取第三行
      • sed ‘n;d’ FILE
      • sed ’1!G;h;$!d’ FILE
      • sed ‘G’ FILE

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/100762

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班