awk - 删除多行 - 从 "patternA"匹配,到第二次出现 "patternB"

标签 awk sed

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

示例...

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

...

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

...

我想查找并删除所有这些行,从包含“something?”的行开始到包含第二个“fi”的行

我可以使用 sed -n '/something?/q;p' 但我不确定如何在包含“fi”的第二行之后添加一个条件来表示停止。任何帮助表示赞赏。

最佳答案

你用 awk 来做这个:

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

关于awk - 删除多行 - 从 "patternA"匹配,到第二次出现 "patternB",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37502712/

相关文章:

regex - 结合这两个正则表达式模式

linux - 如何使用 Unix 排序从平局决胜组中选取最高值

awk - 仅当重复项彼此相距在 5 行以内时才删除重复行

bash - 运行包含 sed 命令的 bash 脚本不会产生任何结果,只会挂起。为什么?

linux - 格式化文本并在特定模式之间添加文本部分

bash - sed:用文件内容替换一系列文本

ios - 如何向目录下的所有文件追加一行?

linux - Awk 检查文件 1 中 column1 的值是否存在于 file2 中并更新另一列中的字段

awk - 如何使用awk计算蛋白质序列中特定残基的总数?

html - bash 脚本 sed 用变量计数替换图像编号