に
head -n 1 file > file
fileがhead開始される前に切り捨てられますが、それを書き込んだ場合:
head -n 1 file 1<> file
それはないようだfile読み書きモードで開かれています。ただし、head書き込みが終了してもファイルは切り捨てられないため、上の行は何もしません(head最初の行を上書きし、他の行はそのままにしておきます)。
ただし、headが戻った後、fdが開いている間は、を実行する別のコマンドを呼び出すことができますtruncate。
例えば:
{ head -n 1 file; perl -e 'truncate STDOUT, tell STDOUT'; } 1<> file
ここで重要なのは、truncate上記のようにhead、ファイル内の最初の行の直後にあるfd 1のカーソルを移動するだけです。必要のない最初の行を書き換えますが、問題はありません。
POSIXヘッドを使用すると、その最初の行を書き直すことなく、実際に逃げることができます。
{ head -n 1 > /dev/null
perl -e 'truncate STDIN, tell STDIN'
} <> file
ここではhead、標準入力でカーソル位置を移動するという事実を使用しています。一方でhead一般的にパフォーマンスを向上させるために、大きな塊でその入力を読んでいました、POSIXがする(可能な場合)、それを必要とするseekことは、それを超えて行っていた場合は、単に最初の行の後にバックします。ただし、すべての実装がこれを行うわけではないことに注意してください。
または、readこの場合は代わりにシェルのコマンドを使用できます。
{ read -r dummy; perl -e 'truncate STDIN, tell STDIN'; } <> file
cut変更できますか?、どうすればiconvで入力ファイルを変換された出力に置き換えることができますか?