我一直在使用grep
和perl
擴展名進行多行匹配。但事實證明,所有匹配的行號取決於第一個多行中的行數比賽 !錯誤的行號與多行grep -P [Perl擴展名]匹配
的grep
正則表達式來找到c
功能啓動:
grep -iPn '^[^\S\n]*?\w+\s+\w+?\s*\([\w-0-9,/* \s]*\)\s*\{$'
我可以解釋用一個例子更好:
假設源文件
int f1(int a) {
int
f2 (int b)
{
在這兩個函數存在在這種情況下,grep與regex成功匹配,輸出到stdout的行號與源文件的行號保持一致。
問題出現在多行函數第一次。這改變了行號輸出,並在檢查文件一段時間後,我得出了一個結論。多行函數是匹配的,但由grep單行讀取,因此它將整個函數分配給一個行號。函數後面的下一行根據行數「函數定義開始正則表達式」佔據。
在我的文件中有很多多行C
函數,行號對它們中的每一個都太偏離。
有沒有辦法解決這個問題?
是一個解決方案,它可以將整個文件讀入內存,然後再與之匹配嗎?換句話說,您的輸入文件不是很大嗎?我假設C源文件的大小合理,如果我們可以這樣做,更容易 – hobbs
是的,合理的大小,但總是有一個限制。正如你所提到的'這個w唉'但是哪個? – Gil