我有一堆C文件,我需要计算有多少#ifdef子句具有#elif子句,但在那些文件中没有#else子句,包括可能嵌套的#ifdef子句。例如,在第一个代码段中没有匹配项,而在第二个代码段中有两个匹配项:
#ifdef A
...
#elif B
...
#else
...
#endif
Run Code Online (Sandbox Code Playgroud)
#ifdef X1
...
#elif X2
...
#endif
...
#ifdef Y1
...
#elif Y2
...
#elif Y3
...
#endif
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种使用某些命令行工具(例如grep,awk或sed)执行此操作的方法,但到目前为止还没有运气。因此,我仍然愿意寻求更简便的选择(如果有)。
我已经使用grep尝试过此正则表达式:('^(?=.*#elif)((?!#elif|#else).)(?=.*\#endif).)*$'一个#elif后面没有另一个#elif或#else并具有一个对应的#endif),但是它不起作用,因为子句位于不同的行。