Поиск и замена строки, а также поставить счетчик в замен - PullRequest
5 голосов
/ 21 декабря 2010

У меня есть куча файлов, содержащих одно и то же сообщение журнала. Одно из них происходит, но поскольку сообщения идентичны, я не знаю, какое именно. Что я хочу сделать, это добавить число после всех этих сообщений, чтобы различать их.

Теперь, обычно, когда у меня есть поиск и замена группы, я просто пишу быстрый perl с одним строком вроде:

perl -pi -e 's/searched/replacement/g' *.c

Но как мне вставить счетчик в замену?

Ответы [ 4 ]

9 голосов
/ 21 декабря 2010

Вы можете использовать модификатор e regex, чтобы добавить значение заменяемого счетчика к вашей замене как:

perl -pi -e 's/searched/"replacement".++$i/ge' *.c

Демо:

$ cat file
hi foo
hey foo
bye foo

$ perl -p -e 's/foo/"bar".++$i/ge' file
hi bar1
hey bar2
bye bar3
4 голосов
/ 21 декабря 2010

Это помогает мне:

perl -pi -e 's/one/"replacement".$counter++/ge' *.c
2 голосов
/ 11 апреля 2016

Если ваш счетчик нуждается в инициализации, поместите ваш код инициализации в блок BEGIN (чтобы он выполнялся только один раз при запуске).

1 голос
/ 21 декабря 2010

РЕДАКТИРОВАТЬ: OOPS Это может быть полезно, только если ваш основной проект тоже на Perl.

Это, вероятно, несколько оффтоп, но как насчет добавления автоматического определения местоположения в сообщения журнала? Мол,

sub whereami {
    my $shout = shift;
    my @stack = caller(1);
    print LOG "$stack[1]:$stack[2]: $shout\n";
}

(см. Вызывающую программу perldoc)

Или даже лучше, use Log::Log4perl qw/:easy/; - это может быть излишним, но попробовать стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...