正規表現で複数行のログを抽出しようとしています。
ところでログファイルが大きすぎて大変ですね。 (約10GB)..
いろいろな方法を試してみましたが、目的の結果が得られませんでした。
最初の試み)
1)「崇高なアプリ」で正規表現を使用します。 =>問題:メモリ不足が表示されます。
2)「スーパー編集アプリ」で正規表現を使用してください。 =>問題:メモリ不足が表示されます。
2回目の試み)osxの端末で「sed」プログラムを使用します。
使用される操作)
$sed -E -n '/.*output:[\S\s]*?AAA[\S\s]*?END.*/p' ./AppLog.txt
AAAがキーワードを検索しています。 (ユーザーID)
「REエラー:無効な冗長演算子オペランド」と表示されます。
AppLog.txtの内容です。
:
:
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID = {"AAA"} <= searching key
01 USER_NAME = {"N"}
02 USER_TEL = {"001-1234-1234"}
:
05 USER_LOCATION = {"earth"}
[END]
=============================================
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID = {"BBB"} <= searching key
01 USER_NAME = {"N"}
:
03 USER_LOCATION = {"saturn"}
[END]
=============================================
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|print log
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID = {"AAA"} <= searching key
01 USER_NAME = {"N"}
02 USER_ADDR = {"bla~ bla~~"}
:
010 JOB = {"designer"}
[END]
=============================================
:
:
必要な結果は次のとおりです。
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID = {"AAA"} <= searching key
01 USER_NAME = {"N"}
02 USER_TEL = {"001-1234-1234"}
:
05 USER_LOCATION = {"earth"}
[END]
=============================================
DEBUG|2018-03-27,14:41:43.089|output:
=============================================
[START]
00 USER_ID = {"AAA"} <= searching key
01 USER_NAME = {"N"}
02 USER_ADDR = {"bla~ bla~~"}
:
010 JOB = {"designer"}
[END]
=============================================
ベストアンサー1
pcregrep
働く:
pcregrep -M \
'DEBUG.*output:\n===*\n.*?\n.*?USER_ID.*?"AAA".*?(\n*?.*?\n*)*?===*' AppLog.txt