重複の可能性:
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
「バックアップ」(つまりソース)ファイルの名前に一連の文字(または単一文字)を指定できます。