次の構造のログファイルがあります。一部のログには改行文字が含まれています。[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
pcregrep
M
利用可能な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
\h
h
水平スペース文字に使用されます。また、\b
単語のb
境界に注意してください。境界がなくてもquery-id=123
一致しますquery-id=1234
。あるいは、[query-id=123]
行の先頭にgrep forを使用してより明示的に指定することもできます。
pcregrep -M '^\[query-id=123\].*(\n\h.*)*' your-file