を使用してファイルの最初の行を印刷できます
_sed -n 1p file.txt
_
を使用してファイルの最初の行を削除できます
_sed -i 1d file.txt
_
sed
で印刷して削除する方法はありますか? FIFO pop()
またはPerlのshift
のようなものです。
コマンドw
を使用して、いくつかの行を別の出力ファイルに書き込むことができます。 Linuxおよびその他の多くのUNIXバリアントでは、/dev/stdout
はプログラムの標準出力です。これは、sedが-i
オプションを使用して書き込む場所ではありません。システムに/dev/stdout
または/dev/fd/1
などのバリアントがない場合は、名前付きパイプに書き込むことができます。
sed -i -e '1 w /dev/stdout' -e '1d' file.txt
この回答は、Gillesの回答を拡張したものです。
アドレスを2回書き込む必要はあまりありません。最初の行を削除するだけのこの例では問題なく機能しますが、ファイルから「抽出」したい行の検索パターンがより複雑な場合、その方法はさらに問題になります。 。アドレスを2回書き込む代わりに、中括弧を使用して、同じアドレスでw
コマンドとd
コマンドの両方を実行できます。元の例を使用すると、次のようになります。
sed -i -e '1{w /dev/stdout' -e 'd}' file.txt
より一般的には:
sed -i -e '/some long regex/{w /dev/stdout' -e 'd}' file.txt
残念ながらこれは不可能です。基本的に、sedからの出力が2つの異なる場所に移動するように要求しています。最初の行をsedのstdoutに出力し、残りの行を元に戻します。ファイル自体。ただし、sedの出力は1か所にしか行くことができません(デフォルトではstdoutになり、-i
オプションを指定すると、ファイルに戻ります)。
幸いなことに、2つのコマンドを個別に実行することによる欠点はありません。