这个问题被多次询问,但给出的答案都是特定的GNU sed。
sed -i '' "/${FIND}/,+2d" "$FILE"
给出“预期的上下文地址”错误。
请有人给我一个例子,说明如何使用BSD sed删除包含匹配的X行以及除匹配之外的其他X行?
答案 0 :(得分:2)
问题在于,这根本不是sed的工作,而是awk的工作。
$ seq 5 | awk '/3/{c=2} !(c&&c--)'
1
2
5
只需将变量c
设置为您要跳过的行数。
答案 1 :(得分:1)
以下sed
编辑脚本(使用-n
运行)将模拟GNU sed
/^pattern/,+2d
的作用:
/^pattern/{
n
n
d
}
p
匹配/^pattern/
时,它将读取接下来的两行输入,然后丢弃所有内容(重新启动循环)。当图案不匹配时,将打印该行。