【发布时间】:2023-08-21 18:31:01
【问题描述】:
这个问题被问了很多次,但给出的答案都是 GNU sed 特定的。
sed -i '' "/${FIND}/,+2d" "$FILE"
给出“预期的上下文地址”错误。
谁能给我一个示例,说明如何使用 BSD sed 删除包含匹配项的 X 行和不包含匹配项的另一 X 行?
【问题讨论】:
这个问题被问了很多次,但给出的答案都是 GNU sed 特定的。
sed -i '' "/${FIND}/,+2d" "$FILE"
给出“预期的上下文地址”错误。
谁能给我一个示例,说明如何使用 BSD sed 删除包含匹配项的 X 行和不包含匹配项的另一 X 行?
【问题讨论】:
问题在于,这根本不是 sed 的工作,而是 awk 的工作。
$ seq 5 | awk '/3/{c=2} !(c&&c--)'
1
2
5
只需将变量 c 设置为您想跳过的行数即可。
【讨论】:
以下sed 编辑脚本(与-n 一起运行)将模拟GNU sed /^pattern/,+2d 所做的:
/^pattern/{
n
n
d
}
p
当匹配/^pattern/时,它会读取接下来的两行输入,然后丢弃所有内容(重新开始循环)。当模式不匹配时,打印该行。
【讨论】: