Как искать и заменять определенную строку кода в C-источнике, используя Perl / что-нибудь еще? - PullRequest
2 голосов
/ 04 апреля 2011

У меня есть исходный код на C, разбросанный по многим исходным файлам (* .c).По причинам переноса, скажите, что мне нужно закомментировать приведенные ниже операторы из всех исходных файлов

fprintf(stderr,"......",....);

Проблема заключается в том, что эти fprintfs могут быть многострочными операторами, то есть разбиваться на две или более строки, разбитые на две строки в исходных файлах ссимвол новой строки (в конце строки вводится символ возврата каретки).

Как найти такие fprintfs, разбросанные по всем исходным файлам, замените их многострочным комментарием C следующим образом:

/*
*/

Поскольку они являются многострочными, команда поиска и замены исходных редакторов не помогла.

Я пытаюсь прочитать исходный файл с помощью сценария PERL, но проанализировать их, но не смог.

Любые указатели были бы полезны.

спасибо.-AD.

Ответы [ 3 ]

3 голосов
/ 04 апреля 2011

То, что вы ищете, называется "coccinelle", это инструмент семантического патча для C, с помощью которого вы можете легко это сделать.а именноhttp://coccinelle.lip6.fr/

2 голосов
/ 04 апреля 2011

Just

#undef fprintf
#define fprintf(stream, format, ...) 42

вверху ваших файлов и будьте счастливы.

0 голосов
/ 07 апреля 2011

Для чистого решения на Perl попробуйте что-то вроде этого:

my $all_lines;
{              # (limit scope of $/, if appropriate)
  local $/;    #slurp entire file in one go
  $all_lines = <$file_handle>
  $all_lines =~ s|(\bfprintf\s*\(\s*stderr\s*,.*?\)\s*;)|/* $1 */|sg;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...