当搜索字符串的代码时,我经常遇到问题,我得到毫无意义的,上下文无关的结果。例如,如果一个函数调用被拆分为3行,并且我搜索参数的名称,那么我自己获取该行的参数,而不是该函数的名称。我该如何grep整个可能包装的代码行?
例如,在含有
...
someFunctionCall ("test",
MY_CONSTANT,
(some *really) - long/expression);
grepping为MY_CONSTANT都将返回一个看起来像这样的线的文件:
MY_CONSTANT,
同样地,在注释块:
/////////////////////////////////////////
// FIXMESOON, do..while is the wrong choice here, because
// it makes the wrong thing happen
/////////////////////////////////////////
修复FIXMESOON给出了非常令人沮丧的答案:
// FIXMESOON, do..while is the wrong choice here, because
当有成千上万的命中时,单行结果有点没有意义。我想要做的就是让grep知道源代码行的起点和终点,就像考虑“;”一样简单。因为线路分隔将是一个好的开始。
奖励分数,如果你可以使它返回整个评论块,如果命中是在评论中。
我知道你不能单独使用grep来做到这一点。我也意识到可以让grep返回一定数量的上下文。有关如何在Linux下完成的任何建议?仅供参考我的首选语言是C和Perl。
我确信我可以写点东西,但我知道有人必须已经做到了。
谢谢!
不知道,但它是一个很好的问题! – mpen 2010-04-22 04:49:40
代替一个好的解决方案,你总是可以使用grep的'-C n'作为上下文的'n'行 – 2010-04-22 05:08:57