改行でログをgrepする方法

改行でログをgrepする方法

次の構造のログファイルがあります。一部のログには改行文字が含まれています。[query-id=123]

[query-id=123] contentA:
 1. content
 2. content
 3. content
[query-id=124] contentC
[query-id=123] contentB:
 1. contentB
 2. contentB

したがって、私がgrepしようとしているのはログの内容全体ですが[query-id=123]、grepをするとquery-id=123ヘッダーがある行だけを取得すると、ヘッダーがある行の後の行[query-id=123] contentA:[query-id=123] contentB:失われます。

ベストアンサー1

pcregrepM利用可能なUlitlineモードがあります:

$ pcregrep -M 'query-id=123\b.*(\n\h.*)*' your-file
[query-id=123] contentA:
 1. content
 2. content
 3. content
[query-id=123] contentB:
 1. contentB
 2. contentB

\hh水平スペース文字に使用されます。また、\b単語のb境界に注意してください。境界がなくてもquery-id=123一致しますquery-id=1234。あるいは、[query-id=123]行の先頭にgrep forを使用してより明示的に指定することもできます。

pcregrep -M '^\[query-id=123\].*(\n\h.*)*' your-file

おすすめ記事