特殊単語を含む最初の行を印刷する方法

特殊単語を含む最初の行を印刷する方法

XXXの下の最初の123を印刷してください。

AAA
BCB
DDD
123
123
XXX
CCC
123
123
MSM
123

答え1

awk 'NR == 1, /XXX/ {next}; /123/ {print; exit}' < input.txt

すべての行は最初の埋め込み行までスキップされ、残りの行のXXXうち最初の埋め込み行が印刷されます。123

変数に格納された文字列の場合:

START='XXX' NEEDLE='fancy string with " and *' awk '
  NR == 1, index($0, ENVIRON["START"]) {next}
  index($0, ENVIRON["NEEDLE"]) {print; exit}' < input.txt

答え2

$ sed -n '/XXX/,$ { /123/ { p; q; }; }' <file
123

pこれにより、現在行を印刷するコマンドが適用され、q一致する行に終了コマンドが適用されます123。テストは、123一致する最初の行と入力端(含む)の間のXXXすべての行で行われます。

行を除外するにはXXX123行と同じ行には表示しないでくださいXXX):

$ sed -n '/XXX/,$ { /XXX/d; /123/ { p; q; }; }' <file
123

関連情報