2013-07-10 42 views
1

我有一個像搜索與cppcheck模式(PCRE)正則表達式

val = (val1 << 8) | (val >> 8); 
val = (val2 << 16) | (val >> 8); 
val = (val3 << 32) | (val >> 8); 
val = (val << 8); 

的代碼片段INT TC我會得到輸出中,如果我用grep爲grep -nhE "(<<.*|).*(>>)" t.c

1:val = (val1 << 8) | (val >> 8); 
2:val = (val2 << 16) | (val >> 8); 
3:val = (val3 << 32) | (val >> 8); 

但如果與像cppcheck搜索./cppcheck --rule="(<<.*|).*(>>)" t.c我會得到輸出

[../test/t.c:1]: (style) found ' val = (val1 << 8) | (val >> 8) ; val = (val2 << 16) | (val >> 8) ; val = (val3 << 32) | (val >>' 

即,整條匹配線togethe顯示第一個匹配的r。我想要在grep命令中的結果。

請幫

+0

你的規則過於複雜。由於交替運算符'|',您只能有效地搜索'>>'。 將簡單表達式與vs兼容輸出相結合,使用'./cppcheck --template = vs --rule =「>>」t.c'。您可以定義自己的格式化輸出的模板,請參見[手冊的第5章](http://cppcheck.sourceforge.net/manual.pdf)。 – collapsar

回答

0

嘗試下面的命令(轉義|):

cppcheck --rule="<<.*?\|.*?>>" t.c 

輸出不如的grep完全相同。