Как я могу записать изменения, сделанные во время редактирования на месте в Perl? - PullRequest
2 голосов
/ 04 марта 2009

Я написал простой ksh, который вызывает Perl-программу для поиска и замены файлов. Переданный аргумент - это домашний каталог:

 perl -pi -e 's/find/replace/g' $1/*.html

Отлично работает. Тем не менее, я хотел бы вывести все изменения в файл журнала. Я пробовал обвязывать и перенаправлять и не смог заставить его работать. Есть идеи?

Спасибо, Гленн

Ответы [ 2 ]

8 голосов
/ 04 марта 2009

Примерно так, чтобы отправить все изменения в STDERR:

perl -pi -e '$old = $_; s/find/replace/g and warn "${ARGV}[$.]: $old $_"; close ARGV if eof' $1/*.html

Обновлено: исправлено $. на несколько файлов.

3 голосов
/ 04 марта 2009

Вы можете распечатать в STDERR и перенаправить только вывод STDERR в файл, как показано ниже:

perl -pi -e 'chomp($prev=$_);s/find/replace/g and print STDERR "$ARGV - $.: $prev -> $_"; close ARGV if eof' $1/*.html 2> logfile.txt

edit: добавлено имя файла и отображение номера фиксированной строки при использовании нескольких входных файлов

...