【问题标题】:How use BSD / OS X sed to remove / delete X Lines after match匹配后如何使用 BSD/OS X sed 删除/删除 X 行
【发布时间】:2023-08-21 18:31:01
【问题描述】:

这个问题被问了很多次,但给出的答案都是 GNU sed 特定的。

sed -i '' "/${FIND}/,+2d" "$FILE"

给出“预期的上下文地址”错误。

谁能给我一个示例,说明如何使用 BSD sed 删除包含匹配项的 X 行和不包含匹配项的另一 X 行?

【问题讨论】:

    标签: bash shell sed bsd


    【解决方案1】:

    问题在于,这根本不是 sed 的工作,而是 awk 的工作。

    $ seq 5 | awk '/3/{c=2} !(c&&c--)'
    1
    2
    5
    

    只需将变量 c 设置为您想跳过的行数即可。

    另见https://*.com/a/18409469/1745001

    【讨论】:

      【解决方案2】:

      以下sed 编辑脚本(与-n 一起运行)将模拟GNU sed /^pattern/,+2d 所做的:

      /^pattern/{
          n
          n
          d
      }
      
      p
      

      当匹配/^pattern/时,它会读取接下来的两行输入,然后丢弃所有内容(重新开始循环)。当模式不匹配时,打印该行。

      【讨论】:

        最近更新 更多