0

大きなログファイルがある場合、テキストのブロックをgrepするための最良の方法は何ですか?

text to be ignored
more text to be ignored
---                                 <---- start capture here
lots of 
text with separators like "---"
---
spanning 
multiple lines
---                                 <---- end capture here
text to be ignored
more text to be ignored

何が知られていますか?

  • 行の最大文字数(55ですが、それより少ない場合があります)
  • ブロック内の行数
  • セパレーター(繰り返される場合があります)

このブロックに一致する正規表現は何ですか?必要な出力:テキストのブロックのリスト。

Linuxコマンドライン環境を想定してください

4

3 に答える 3

2

数年前、私はこれを使ってパッチをハンクに分割しました:

sed -e '$ {x;q}' -e '/@@/ !{H;d}' -e '/@@/ x' # note - i know sed better now

に置き換え/@@/ます/---/

最初'---'と最後の前のすべてを削除するには、全体を'---'追加して削除します。-e '1,/---/d'-e '$ {x;q}'

結果は次のようになります。

sed -e '1,/---/d' -e '/---/ !{H;d}' -e x

それをテストしただけで、与えられた例で動作します。

于 2013-01-08T01:23:02.963 に答える
0

十分なメモリがある場合は、次の行を使用できます。ただし、ログファイル全体がメモリに読み込まれることに注意してください。

perl -0777 -lnE 'm{ ^--- .+ ^--- }xms and say $&' logfile
于 2013-01-08T15:03:47.210 に答える
0

複雑にしないでおく:

$ awk 'NR==FNR {if (/^---/) { if (!start) start=NR; end=NR } next} FNR>=start && FNR<=end' file file
---                                 <---- start capture here
lots of
text with separators like "---"
---
spanning
multiple lines
---                                 <---- end capture here

$ awk 'NR==FNR {if (/^---/) { if (!start) start=NR; end=NR } next} FNR>start && FNR<end' file file
lots of
text with separators like "---"
---
spanning
multiple lines
于 2013-01-08T14:13:15.737 に答える