2

Perl プログラムを呼び出してファイルを検索および置換する単純な ksh のスクリプトを作成しました。渡された引数はホーム ディレクトリです。

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

それはうまくいきます。ただし、すべての変更をログ ファイルに出力したいと考えています。パイプとリダイレクトを試みましたが、うまくいきませんでした。何か案は?

ありがとう、グレン

4

2 に答える 2

8

すべての変更を STDERR に送信するには、次のようにします。

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

更新: 固定 $. 複数のファイルで。

于 2009-03-04T19:23:28.083 に答える
3

以下のように、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

編集:ファイル名を追加し、複数の入力ファイルが使用されている場合の行番号の表示を修正しました

于 2009-03-04T19:50:27.647 に答える