我如何grep整个,可能包装的代码行?

NXT*_*NXT 10 unix linux awk command-line grep

在搜索字符串的代码时,我经常遇到的问题是我没有意义,没有上下文的结果.例如,如果函数调用分为3行,并且我搜索参数的名称,则我自己获取参数,而不是函数的名称.

例如,在包含的文件中

...
  someFunctionCall ("test",
                    MY_CONSTANT,
                    (some *really) - long / expression);
Run Code Online (Sandbox Code Playgroud)

grepping for MY_CONSTANT将返回如下所示的行:

                    MY_CONSTANT,
Run Code Online (Sandbox Code Playgroud)

同样,在评论栏中:

/////////////////////////////////////////
// FIXMESOON, do..while is the wrong choice here, because
// it makes the wrong thing happen
/////////////////////////////////////////
Run Code Online (Sandbox Code Playgroud)

为FIXMESOON打气给出了非常令人沮丧的答案:

// FIXMESOON, do..while is the wrong choice here, because
Run Code Online (Sandbox Code Playgroud)

当有数千次点击时,单行结果有点无意义.我想要做的是让grep知道源代码行的起点和终点,就像让它考虑";"一样简单.因为行分隔符将是一个良好的开端.

如果点击位于评论内,您可以使其返回整个评论区块的奖励积分.

我知道你不能单独使用grep来做到这一点.我也知道让grep返回一定数量的上下文的选项.有关如何在Linux下完成的任何建议?仅供参考我的首选语言是C和Perl.

我确信我可以写点什么,但我知道有人必须已经这样做了.

谢谢!

Wil*_*rth 3

您可以将 pcregrep 与 -M 选项一起使用(多行匹配;pcregrep 是带有 Perl 兼容正则表达式的 grep)。就像是:

pcregrep -M ";*\R*.*thingtosearchfor*\R*.*;.*"
Run Code Online (Sandbox Code Playgroud)