我一直在使用 grep
with perl
extension 进行多行匹配。但是事实证明,所有匹配的行号取决于第一个多行匹配中的行数!
grep
查找c
函数 start的正则表达式:
grep -iPn '^[^\S\n]*?\w+\s+\w+?\s*\([\w-0-9,/* \s]*\)\s*\{$'
我可以用一个例子更好地解释:
假设源文件中存在这两个函数
int f1(int a) {
int
f2 (int b )
{
在这种情况下,grep 成功匹配正则表达式,输出到 stdout 的行号与源文件的行号一致。
当多行函数首先出现时会出现问题。这会改变行号输出,在检查文件一段时间后,我得出了结论。多行函数匹配但被 grep 读取为单行,因此它为整个函数分配一个单行号。函数后面的下一行根据“函数定义开始正则表达式”的行数缩短其行号占据。
我的文件中有许多多行C
函数,并且每个函数的行号都太偏离了。
有没有办法纠正这个?