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
元のファイルを更新したい場合、または更新する必要がある場合は、結果を再コピーするだけです。
これは-i
sedオプションが実行する操作なので、元のファイルが更新されます。
sed -i.bak '/string/,$d' file