此问题的扩展Delete multiple lines - from "patternA" match, through second occurrence of "patternB" ...我想我应该让它更强大。
所以,不是计算多少fi
,而是可能存在未知数量,我希望能够简单地执行某些事情......
如果我有以下文件/somepath/somefile
包含:
...
# Test something?
if something
then
do something
if somethingelse
then
do somethingelse
fi
fi
...
...包含未知数量的可能if
/ fi
语句,如何从包含“something?
”的字符串开始的行中删除所有内容将“fi
”关闭到第一个if
?任何/所有帮助表示赞赏。
答案 0 :(得分:5)
一般来说,你需要一个解析器。但是,如果脚本中的所有命令都遵循问题中的示例模式(if
/ fi
始终在行的开头),那么这个有点粗糙的if计数解决方案应该可行。
awk 'BEGIN { del=0; level=0 } /Test something?/ { del=1 } del==0 { print } /^if / { level++ } /^fi( |$)/ { level--; if (level == 0) del=0 }' somefile