特定の文字列を含む行の先頭からテキスト全体を削除する方法

特定の文字列を含む行の先頭からテキスト全体を削除する方法

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 >> otherfile1つの行からすべての行を抽出すると、含む stringファイルの末尾 ( $) を otherfile ファイルに追加します。

その補集合を抽出する最も簡単な方法は、一致を補集合することです。

sed '/string/,$d' file >> someOtherDifferentFile

元のファイルを更新する必要がある場合は、結果をコピーして戻すだけです。

これは-ised のオプションが行うことで、これにより元のファイルが更新されます。

sed -i.bak '/string/,$d' file

関連情報