當搜索字符串的代碼時,我經常遇到問題,我得到毫無意義的,上下文無關的結果。例如,如果一個函數調用被拆分爲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