Perl: прокрутить файл и заменить

Я просто хочу прочитать файл журнала, выполнить поиск и замену, а затем записать изменения в тот же файл журнала.

Как лучше всего это сделать в Perl?


person Community    schedule 01.06.2009    source источник


Ответы (3)


Я обычно кодирую один лайнер для этого:

perl -i -pe 's/some/thing/' log.file

См. здесь

person Todd Gardner    schedule 01.06.2009
comment
Но почему я не могу использовать обратные ссылки? Например, perl -pi -e s/foo(.*)bar/bar$1foo/ tezt2 не работает.. - person ; 01.06.2009
comment
Ваша оболочка, вероятно, повреждает строку. Попробуйте заменить s на 's, чтобы * не расширялся. - person Alex Feinman; 01.06.2009
comment
В то время как strict обычно не имеет смысла для однострочников, включение предупреждений с -w иногда будет выявлять проблемы для вас; вы должны делать это по привычке. - person ysth; 01.06.2009

Это часто делается с помощью одной строки:

perl -pi.bak -e "s/find/replace/g" <file>

Обратите внимание на часть -i.bak — это создает файл резервной копии с расширением .bak. Если вы хотите играть без сети, вы можете сделать это, чтобы перезаписать существующий файл без резервной копии:

perl -pi -e "s/find/replace/g" <file>
person Michael Carman    schedule 01.06.2009

или вы можете использовать sed (я знаю... вы спрашивали о Perl):

sed -i 's/find/replace/g' <file>
person Nathan Fellman    schedule 01.06.2009
comment
То, как sed обрабатывает правила регулярных выражений,... отличается от Perl, если не сказать больше. - person ; 01.03.2012