我想if
在一组 C 源文件中搜索简单的语句。
这些是以下形式的陈述:
if (condition)
statement;
任何数量的空格或其他序列(例如“} else”)都可能出现在if
. 注释可能出现在“if (condition)”和“statement;”之间。
我想排除以下形式的复合语句:
if (condition)
{
statement;
statement;
}
我在 awk 中尝试了以下各项:
awk '/if \(.*\)[^{]+;/ {print NR $0}' file.c # (A) No results
awk '/if \(.*\)[^{]+/ {print NR $0}' file.c # (B)
awk '/if \(.*\)/ {print NR $0}' file.c # (C)
(B) 和 (C) 给出不同的结果。两者都包括我正在寻找的项目和我想要排除的项目。显然,部分问题在于如何处理跨越多行的模式。
可以忽略边缘情况(格式错误的注释、奇数缩进或奇数位置的花括号等)。
我怎样才能做到这一点?