2

次のような「test.txt」というファイルがあります。

hello world

それは、単なる「helloworld」文字列です。Perl正規表現を使用する場合:

perl -pe "s/hello/bye/g" test.txt

それは言う:

bye world

しかし、そのファイルをそれ自体にリダイレクトしようとすると、次のようになります。

perl -pe "s/hello/bye/g" test.txt > test.txt

結果のファイルは空です。なんで?また、ファイルに対して正規表現を「フィルタリング」するにはどうすればよいですか?

4

3 に答える 3

3

アプリケーションがファイルから読み取る機会を得る前に、リダイレクトのためにファイルを書き込み用に開きます。代わりに一時ファイルにリダイレクトしてから、名前を変更してください。

于 2012-05-30T10:04:48.600 に答える
3

perlインプレースのパラメータを受け入れます-i。これにより、perlプログラムでファイルを処理し、すぐに書き戻すことができます。

于 2012-05-30T10:06:15.117 に答える
2

リダイレクトは、シェルがコマンドラインを解析している間に行われます。これは実際のコマンドが実行される前に発生するため、リダイレクト先のファイルは、読み取る前に上書きされます。

于 2012-05-30T10:04:46.787 に答える