パターンを除いて、パターンが最初に発生した後のテキスト行を印刷します(OSX)

パターンを除いて、パターンが最初に発生した後のテキスト行を印刷します(OSX)

以下は、「word」を削除して「word」を含むすべての項目を選択して、「word」を含むフルテキスト行を印刷するスクリプトです。

sed -ne 's/word//p'  file.txt >> newfile.txt

「単語」が最初に表示された後にテキスト行のみを印刷し、印刷された行から「単語」を削除するにはどうすればよいですか?

私はOSXを使用しています。

以下はサンプルテキストです。

Blalala 

'Omfoem From

balanf

word I want this output

word Not this output

Omfoem527

これが私の予想結果です。

 I want this output

更新:必要なタスクを実行するスクリプトは次のとおりです。

sed -n 's/^.*word //p'  file.txt > temp.txt
sed -n '1p' temp.txt >> newfile.txt
rm temp.txt

最初の行は「単語」を削除した後、「単語」を含むテキストの行全体を印刷し、temp.txtファイルから「単語」が表示されるすべての項目を選択します。また、「単語」の前に別のテキストが来る場合に備えて^.*を追加しました。
2行目はtemp.txtファイルの最初の行だけをnewfile.txtに印刷し、3行目はtemp.txtファイルを削除します。

最も効率的ではありませんが、動作します。

ベストアンサー1

この試み、

sed -n '/word/{n;p;q}' file
  • n -> パターン空間の次の入力行を読み取るか追加します。
  • p ->現在のパターンスペースを印刷します。
  • q ->追加の入力を処理せずに直ちにsedスクリプトを終了します。最初の項目のみ...

おすすめ記事