警告:これは危険な方法です!LinuxのI / Oバッファを乱用し、バッファリングの特定のオプションを使用して、小さなファイルを処理します。それは興味深い好奇心です。ただし、実際の状況では使用しないでください。
あなたの-i
オプションに加えてsed
、tee
ユーティリティを使用することができます。
からman
:
tee-標準入力から読み取り、標準出力とファイルに書き込みます
したがって、解決策は次のとおりです。
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee | tee index.html
-ここでtee
は、パイプラインが確実にバッファされるように繰り返されます。次に、パイプライン内のすべてのコマンドは、動作する入力を取得するまでブロックされます。パイプライン内の各コマンドは、上流のコマンドが1バイトのバッファー(サイズはどこかで定義されている)をコマンドの入力に書き込んだときに開始されます。そのtee index.html
ため、書き込みのためにファイルを開いて空にする最後のコマンドは、上流のパイプラインが終了し、出力がパイプライン内のバッファーにある後に実行されます。
ほとんどの場合、以下は機能しません。
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee index.html
-ブロックせずにパイプラインの両方のコマンドを同時に実行します。(パイプラインをブロックせずにバッファによって代わりにバッファのラインでバイトラインを通過しなければならない。あなたが実行したときと同じcat | sed s/bar/GGG/
。それはよりインタラクティブだとちょうど2コマンドの通常のパイプラインをバッファリングし、ブロックせずに実行ブロックせずに。長いパイプラインがバッファリングされている。)tee index.html
の意志を書き込み用にファイルを開くと、空になります。ただし、バッファリングを常にオンにすると、2番目のバージョンも機能します。
perl -pi -w -e 's/STRING_TO_REPLACE/REPLACE_WITH/g;' index.html