私はしばしば次のファイルに対して簡単な作業をします。
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
あなたは必要ありませんcat
。sed
Blithely はファイル名を引数として受け入れます。
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>