• 欢迎光临~

sed进阶

开发技术 开发技术 2022-10-17 次浏览

sed进阶

  • 空间

    • 模式空间

      • sed编辑器当前正在工作的所在行

        • 多行处理

          • 跳过行

            • n

              • 匹配到所在行后,跳转到下一行执行操作

                • sed '/target/{n;xxx}' file
          • 合并行

            • N

              • 匹配到所在行后,把下一行合并到模式空间执行操作

                • sed '/target/{N;xxx}' file
          • 合并行后删除行

            • D

              • 匹配到所在行后,把下一行合并到模式空间,并删除模式空间的第一行

                • sed 'N;/target/D' file
          • 合并行后打印行

            • P

              • 匹配到所在行后,把下一行合并到模式空间,并打印模式空间的第一行

                • sed 'N;/target/P' file
    • 保持空间

      • sed编辑器临时保存行的缓冲区

        • 命令

          • h

            • 已匹配的模式空间复制到保持空间后打印

              • sed -n '/target/{h;p}' file
          • H

            • 已匹配模式空间附加到保持空间后打印

              • sed -n '/target/{H;p}' file
          • g

            • 已匹配把保持空间复制到模式空间后打印

              • sed -n '/target/{g;p}' file
          • G

            • 已匹配把保持空间附加到模式空间后打印

              • sed -n '/target/{G;p}' file
          • x

            • 已匹配交换模式空间和保持空间的内容后打印

              • sed -n '/target/{x;p}' file
  • 排除命令

    • 让原来起作用的命令不起作用

      • 命令

        • !

          • 除了匹配行以外的所有行都打印

            • sed -n '/target/!p' file
  • 改变执行顺序

    • 分支

      • 命令

        • b

          • 格式

            • [address] b [label]
          • 无标签

            • 跳过不执行指定行

              • sed '{[address]b; /xxx/xxx/;/xxx/xxx/}' file
          • 有标签

            • 匹配行后跳转到标签,执行标签命令,处理后执行剩余的非标签命令

              sed '{/target/b  jump1  /xxx/xxx/;  /xxx/xxx /   
               :jump 
               /xxx/xxx } '  file
              
        • t

          • 格式

            • [address] t [label]
          • 无标签

            • 测试t前面的命令是否执行成功,接着执行t后面的命令

              • sed '{/xxx/xxx/ t /xxx/xxx/}' file
          • 有标签

            • 测试t前面的命令是否执行成功,不成功则执行标签命令,最后处理剩余的非标签命令

              • sed '{/xxx/xxx/ t jump1 /xxx/xxx/ :jump /xxx/xxx/} '
  • 实战

    • 处了最后一行,每行后面插入空白行

      • sed '$!G' file
    • 除了最后一行,先删除已有空白行,再插入空白行

      • sed '/^$/d; $!G' file
    • 在每行前一行添加行号

      • sed '=' file
    • 在每行行首添加行号

      -sed '=' file | sed 'N; s/n/ /'

    • 打印最后一行

      • sed -n '$p' file
    • 打印后十行

      • sed '{ :start ;$q;N;11,$D ;b start}' file
    • 只删除连续空行

      • sed '/./,/^$/!d' file
    • 删除开头的空白行

      • sed '/./,$!d' file
    • 删除结尾的空白行

      • sed '{ :start /^n*$/ { $d; N; b start}}'
    • 删除所有的html标签

      • sed 's/^<[^>]*>//g' file
程序员灯塔
转载请注明原文链接:sed进阶
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com