如何使用BSD / OS X sed在匹配后删除/删除X行

时间:2016-07-19 15:01:45

标签: bash shell sed bsd

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

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

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

请有人给我一个例子,说明如何使用BSD sed删除包含匹配的X行以及除匹配之外的其他X行?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

以下sed编辑脚本(使用-n运行)将模拟GNU sed /^pattern/,+2d的作用:

/^pattern/{
    n
    n
    d
}

p

匹配/^pattern/时,它将读取接下来的两行输入,然后丢弃所有内容(重新启动循环)。当图案不匹配时,将打印该行。