ヒット後の次のN行をgrepおよび印刷する方法は?


16

テキストファイルのオカレンスをgrepし、オカレンスが検出されるたびに次のN行を出力します。何か案は?

回答:


23

Grepには、これを行うための次のオプションがあります(これに似たもの)。詳細については、manページをご覧ください。

  • -A num各マッチの後に、末尾のコンテキストのnum行を出力します。-Bおよび-Cオプションも参照してください。

  • -B num各マッチの前に先頭のコンテキストのnum行を印刷します。-Aおよび-Cオプションも参照してください。

  • -C [num]各マッチを囲む前後のコンテキストのnum行を出力します。デフォルトは2で、-A 2 -B 2と同等です。注:オプションとその引数の間に空白を入れないでください。


7

GNUをお持ちの場合はgrep-A/ --after-contextオプションです。それ以外の場合は、で実行できますawk

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename

1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename-動作しますが、動作しません。
BladeMight


3

行の一致後にN行を印刷します

オプションを使用grepして、-A n行の一致後にN行を印刷できます。

例えば:

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

その他の関連オプション:

一致する行の前にN行を印刷します

-B nオプションを使用すると、行を照合する前にN行を印刷できます。

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

一致する行の前後にN行を印刷します

-C nオプションを使用すると、一致する行の前後にN行を印刷できます。

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.