删除多行 - 来自" patternA"匹配,通过第二次出现" patternB"

时间:2016-05-28 18:51:08

标签: awk sed

我想使用sed或类似工具查找包含" something?"并删除该行和所有后续行,直到第二次出现包含" fi"。

的行。

示例...

如果我有以下文件/somepath/somefile包含:

...

# Test something?
if something
then
do something
if somethingelse
then
do somethingelse
fi
fi

...

我希望找到并删除所有这些行,从包含" something?"的行开始通过包含第二个" fi"

的行

我能够删除所有以包含" something?"使用sed -n '/something?/q;p'直到文件末尾,但我不确定如何在第二行包含" fi"之后添加一个条件来说停止。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

您使用Awk执行此操作:

awk 'BEGIN { del=0 } /Test something\?/ { del=2 } del<=0 { print } /fi/ { del -= 1 }' your-file

答案 1 :(得分:1)

使用GNU sed:

sed '/something?/,/fi/{/fi/N;d}' file

如果你想编辑你的文件&#34;就地&#34;使用sed的选项-i