パイプラインコマンドチェーン内で「フルファイルバッファリング」を実行する方法はありますか?

パイプラインコマンドチェーン内で「フルファイルバッファリング」を実行する方法はありますか?

私はしばしば次のファイルに対して簡単な作業をします。

cat file1.txt|sed -r 's/^ *//'

行の先頭のスペースを削除します。ファイルを上書きするには、私が知っている唯一の方法は次のとおりです。

cat file1.txt|sed -r 's/^ *//' > file2.txt
mv file2.txt file1.txt

file2.txtが存在するかどうかを確認する必要があり、コマンドを1つではなく2つ使用するなど、非常に面倒です。

それで、私はパイプラインコマンドチェーンで完全なファイルバッファリングを実行する方法がありますか?だから私は次のように書くことができます:

cat file1.txt| magicbuffercommand |sed -r 's/^ *//' > file1.txt

コマンドはバッファリング(もちろん最大バイトまで)し、EOFを待ってからstdoutへの書き込みを開始する必要があります。

そのようなことができることはありますか?

ベストアンサー1

あなたは必要ありませんcatsedBlithely はファイル名を引数として受け入れます。

sed 's/^ *//' <file>

GNU sed を使用している場合、-iまたはスイッチを使用して--in-placeファイルをその場で編集できます。

sed -i 's/^ *//' <file>

spongeこの質問に答えるには、次のツールを使用して「フルファイルバッファリング」を実装できます。 その他のユーティリティパッケージ。これにより、 sponge次のことができます。

<command> <file> | sponge <file>  # or
<command1> < <file> | <command2> | sponge <file>

あなたのsed例を使用すると、次のようになります。

sed 's/^ *//' <file> | sponge <file>

おすすめ記事