ファイル自体を「cat」するとファイルが削除されるのはなぜですか? [コピー]

ファイル自体を「cat」するとファイルが削除されるのはなぜですか? [コピー]

重複の可能性:
IOリダイレクトとヘッドコマンド

最初の行を除いて、ファイルのすべての内容を削除したいと思います。私はこれをしました:

head -1 foo.txt

...そして最初の行だけが見えることを確認してください。それから私は次のことをしました。

head -1 foo.txt > foo.txt

しかし、もはや最初の行だけが含まれず、空foo.txtです。

これによりcat foo.txt > foo.txtファイルも消去されました。

なぜ?

ベストアンサー1

シェルがデータ処理を開始する前に、すべての入力と出力が二乗されていることを確認する必要があります。

したがって、あなたの場合、デフォルトでは、使用は> foo.txtシステムに「名前付き(新しい)ファイルを作成し、foo.txtこのコマンドのすべての出力をそのファイルに貼り付けます」と指示します。

ご存知のように、問題は以前の内容が消去されることです。

関連する>>追加既存のファイルに。

修正する:

これは使用されたソリューションですsed。注意して扱ってください。

 sed -i '2,$d' foo.txt

「最後」までの2行目を削除します。所定の位置にファイルにfoo.txt。混乱を招く可能性のあるファイルで最初に試してみることをお勧めします。 :)

このコマンドのわずかに変更されたバージョンは、.bak次の拡張子を使用して元のバージョンのコピーを保持します。

 sed -i.bak '2,$d' foo.txt

コマンドラインスイッチの後に、-i「バックアップ」(つまりソース)ファイルの名前に一連の文字(または単一文字)を指定できます。

おすすめ記事