
sed -n '/string/,$p' file >> otherfile
特定の文字列を含む行から別のファイルにテキストをコピーするために使用します。
ここで、コピーしたテキストを元のファイルから削除したいと思います。sed と awk でさまざまな方法を試しましたが、何も機能しませんでした。
sed を使用して、特定の文字列を含むファイルのテキストを先頭行から削除するにはどうすればよいですか?
texta
texta1
textb <- string, delete rest of the text from here
textb1
textc
textc1
または、sed を使用してコピーする代わりに切り取る方が簡単でしょうか。また、代わりに使用するコマンドは何でしょうか。
答え1
あなたはできるわ指定された範囲の行を新しいファイルに書き出し、d範囲を削除します - 難しいのは、d
コマンドが出力ファイル名の一部として扱われないようにすることです。GNU sedでは、writeとdeleteを次のように別々の式に分割することでこれを実現できます。-e
重要な注意: これはotherfile
追加ではなく切り捨てになります
sed -i.bak -e '/string/,${w otherfile' -e 'd;}' file
答え2
またはedを使用してください。
ed -s file <<< $'/textb/,$w otherfile\n/textb/,$d\nw\nq'
あなたの意見を踏まえてファイルの:
texta
texta1
textb <- string, delete rest of the text from here
textb1
textc
textc1
コマンドを実行した後ed
、ファイル次のように変わります:
texta
texta1
(最後に空白行がありますが、ここでは書式設定により消えます)その他のファイル含まれるもの:
textb <- string, delete rest of the text from here
textb1
textc
textc1
コマンドはed
次のとおりです。
/textb/,$w otherfile
-- その範囲の行を書き込むその他のファイル/textb/,$d
-- その範囲の行を削除しますw
-- 変更されたファイルをディスクに書き出すq
-- 終了 ed
答え3
このコマンドを使用してsed -n '/string/,$p' file >> otherfile
1つの行からすべての行を抽出すると、含む string
ファイルの末尾 ( $
) を otherfile ファイルに追加します。
その補集合を抽出する最も簡単な方法は、一致を補集合することです。
sed '/string/,$d' file >> someOtherDifferentFile
元のファイルを更新する必要がある場合は、結果をコピーして戻すだけです。
これは-i
sed のオプションが行うことで、これにより元のファイルが更新されます。
sed -i.bak '/string/,$d' file