поиск шаблона с регулярным выражением cppcheck (pcre)

У меня есть фрагмент кода int t.c, например

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

Я получу вывод, если я выполню 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 >>'

т.е. отображаются все совпадающие строки вместе с первого совпадения. Мне нужен результат, как в команде grep.

Пожалуйста помоги


person dday    schedule 10.07.2013    source источник
comment
ваше правило слишком сложно. благодаря оператору чередования | вы эффективно ищете >>only. комбинируя более простое выражение с выводом, совместимым с vs, используйте ./cppcheck --template=vs --rule=">>" t.c. вы можете определить свой собственный шаблон для форматирования вывода, см. главу 5 руководства.   -  person collapsar    schedule 10.07.2013


Ответы (1)


Попробуйте выполнить следующую команду (с экранированием |):

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

Вывод не совсем такой, как у grep.

person falsetru    schedule 10.07.2013