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

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

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では、以下を使用して書き込みと削除を別々の式に分割することでこれを行うことができます。-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——編集終了

答え3

このコマンドを使用して1つのsed -n '/string/,$p' file >> otherfileコマンドからすべての行を抽出する場合含む stringファイルの終わり($)から別のファイルファイルへ。

報酬を抽出する最も簡単な方法は、一致を補完することです。

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

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

これは-isedオプションが実行する操作なので、元のファイルが更新されます。

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

関連情報