何かのログを見たり加工したりする時、以下の正規表現を良く使用しています。
本当に良く使用するものなので、VPCフローログを参考に以下内容の正規表現を書いてみます。
検証は「サクラエディタ」で行ってます。
●●を含む行のみを残す ※例:「Error」行のみ取り出したい、通信拒否されてるものだけ見たい
●●を含む行のみを消す ※例:「Infomation」行のみ要らない、NODATA行は要らない
目次
1 サンプルログ:VPCフローログ
2 ●●を含む行のみを残す
2-1 「ACCEPT」を含む行のみを残す。
2-2 「REJECT」を含む行のみを残す。
2-3 「プライベートIPアドレス」を含む行のみを残す。
2-4 「特定のIPアドレス」を含む行のみを残す。
3 ●●を含む行のみを消す
3-1 「ACCEPT」を含む行のみを消す。
3-2 「REJECT」を含む行のみを消す。
3-3 「プライベートIPアドレス」を含む行のみを消す。
3-4 「特定のIPアドレス」を含む行のみを消す。
4 サンプルログ内で使えそうな正規表現
4-1 年-月-日
4-2 時:分:秒
4-3 ポート番号とかの数字をHITさせる場合、前後に「半角空白」を付けると楽です。
1 サンプルログ:VPCフローログ
動作検証用に以下のログを用意しました。
本記事の確認で利用する際はテキストファイルに移して、サクラエディタで開いてください。
※一番最後の空行までコピーしてください。
2021-09-19T18:43:30.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 129.250.35.250 123 123 17 1 76 1632077010 1632077041 REJECT OK
2021-09-19T18:45:05.000Z 2 122295887337 eni-0ffab6a423aba9790 192.168.11.4 194.0.5.123 123 123 17 1 76 1632077105 1632077161 REJECT OK
2021-09-19T18:46:03.000Z 2 122295887337 eni-04d996ec40472c0a8 - - - - - - - 1632077163 1632077236 - NODATA
2021-09-19T18:46:12.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 103.202.216.35 123 123 17 1 76 1632077172 1632077221 REJECT OK
2021-09-19T18:48:03.000Z 2 122295887337 eni-0ffab6a423aba9790 - - - - - - - 1632077283 1632077401 - NODATA
2021-09-19T18:48:11.000Z 2 122295887337 eni-04d996ec40472c0a8 - - - - - - - 1632077291 1632077356 - NODATA
2021-09-19T18:50:06.000Z 2 122295887337 eni-04d996ec40472c0a8 - - - - - - - 1632077406 1632077536 - NODATA
2021-09-19T18:51:30.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 172.105.204.167 123 123 17 1 76 1632077490 1632077521 REJECT OK
2021-09-19T18:51:30.000Z 2 122295887337 eni-0ffab6a423aba9790 192.168.11.4 52.119.223.48 49202 443 6 5 300 1632077490 1632077521 ACCEPT OK
2021-09-19T18:51:30.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 52.119.223.48 49204 443 6 5 300 1632077490 1632077581 ACCEPT OK
2021-09-19T18:52:46.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 124.41.72.52 123 123 17 1 76 1632077566 1632077581 REJECT OK
2021-09-19T18:52:46.000Z 2 122295887337 eni-0ffab6a423aba9790 172.31.11.4 52.119.223.48 49210 443 6 5 300 1632077566 1632077581 ACCEPT OK
2021-09-19T18:52:46.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 52.119.223.48 49212 443 6 2 120 1632077566 1632077581 ACCEPT OK
2021-09-19T18:53:13.000Z 2 122295887337 eni-04d996ec40472c0a8 - - - - - - - 1632077593 1632077656 - NODATA
2021-09-19T18:53:30.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 129.250.35.251 123 123 17 1 76 1632077610 1632077641 REJECT OK
2021-09-19T18:53:30.000Z 2 122295887337 eni-0ffab6a423aba9790 172.16.11.4 52.119.223.48 49212 443 6 3 180 1632077610 1632077641 ACCEPT OK
2021-09-19T18:54:30.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 133.18.174.255 123 123 17 1 76 1632077670 1632077701 REJECT OK
2021-09-19T18:55:13.000Z 2 122295887337 eni-04d996ec40472c0a8 - - - - - - - 1632077713 1632077836 - NODATA
2021-09-19T18:55:13.000Z 2 122295887337 eni-0ffab6a423aba9790 - - - - - - - 1632077713 1632077881 - NODATA
2021-09-19T18:58:13.000Z 2 122295887337 eni-04d996ec40472c0a8 - - - - - - - 1632077893 1632077956 - NODATA
2021-09-19T18:58:14.000Z 2 122295887337 eni-0ffab6a423aba9790 - - - - - - - 1632077894 1632078001 - NODATA
2021-09-19T19:00:07.000Z 2 122295887337 eni-04d996ec40472c0a8 - - - - - - - 1632078007 1632078137 - NODATA
2021-09-19T19:00:23.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 162.159.200.123 123 123 17 1 76 1632078023 1632078061 REJECT OK
2021-09-19T19:01:28.000Z 2 122295887337 eni-0ffab6a423aba9790 10.20.11.4 45.32.30.244 123 123 17 1 76 1632078088 1632078121 REJECT OK
2021-09-19T19:02:30.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 108.61.223.189 123 123 17 1 76 1632078150 1632078181 REJECT OK
2021-09-19T19:03:09.000Z 2 122295887337 eni-04d996ec40472c0a8 - - - - - - - 1632078189 1632078257 - NODATA
2021-09-19T19:03:30.000Z 2 122295887337 eni-0ffab6a423aba9790 10.0.11.4 129.250.35.251 123 123 17 1 76 1632078210 1632078242 REJECT OK
2021-09-19T19:05:12.000Z 2 122295887337 eni-04d996ec40472c0a8 - - - - - - - 1632078312 1632078437 - NODATA
2_●●を含む行のみを残す
2-1 「ACCEPT」を含む行のみを残す。
「ACCEPT」はVPCフローログで通信が許可されたもの。
# 置換前文字列
^(?!.*(ACCEPT)).*\R
# 置換後文字列
(空欄)
2-2 「REJECT」を含む行のみを残す。
「REJECT」はVPCフローログで通信拒否されたもの。
# 置換前文字列
^(?!.*(REJECT)).*\R
# 置換後文字列
(空欄)
2-3 「プライベートIPアドレス」を含む行のみを残す。
# 置換前文字列
## Class-A & B & C
### <簡易> 第1オクテットが「10, 172, 192」であるかどうかだけ見てます。
^(?!.*((10|172|192)\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})).*\R
### <詳細> 第1, 第2オクテットまでちゃんとプライベートIPかを見ます。
^(?!.*((10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|172\.(1[6-9]|2[0-9]|3[01])\.[0-9]{1,3}\.[0-9]{1,3}|192\.168\.[0-9]{1,3}\.[0-9]{1,3}))).*\R
## Class-A
### 第1オクテットが「10」であるかを見てます。
^(?!.*(10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})).*\R
## Class-B
### 第1オクテットが「172」, 第2オクテットが「16~31」であるかを見てます。
^(?!.*(172\.(1[6-9]|2[0-9]|3[01])\.[0-9]{1,3}\.[0-9]{1,3})).*\R
## Class-C
### 第1, 第2オクテットが「192.168」であるかを見てます。
^(?!.*(192\.168\.[0-9]{1,3}\.[0-9]{1,3})).*\R
# 置換後文字列
(空欄)
2-4 「特定のIPアドレス」を含む行のみを残す。
# 置換前文字列
## 「.」は正規表現の「改行を除く任意の1文字」となってしまうため「\」でエスケープする。
^(?!.*(129\.250\.35\.251)).*\R
# 置換後文字列
(空欄)
3 ●●を含む行のみを消す
3-1 「ACCEPT」を含む行のみを消す。
「ACCEPT」はVPCフローログで通信が許可されたもの。
# 置換前文字列
.*(ACCEPT).*\R
# 置換後文字列
(空欄)
3-2 「REJECT」を含む行のみを消す。
「REJECT」はVPCフローログで通信拒否されたもの。
# 置換前文字列
.*(REJECT).*\R
# 置換後文字列
(空欄)
3-3 「プライベートIPアドレス」を含む行のみを消す。
# 置換前文字列
## Class-A & B & C
### <簡易> 第1オクテットが「10, 172, 192」であるかどうかだけ見てます。
.*((10|172|192)\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*\R
### <詳細> 第1, 第2オクテットまでちゃんとプライベートIPかを見ます。
.*((10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|172\.(1[6-9]|2[0-9]|3[01])\.[0-9]{1,3}\.[0-9]{1,3}|192\.168\.[0-9]{1,3}\.[0-9]{1,3})).*\R
## Class-A
### 第1オクテットが「10」であるかを見てます。
.*(10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*\R
## Class-B
### 第1オクテットが「172」, 第2オクテットが「16~31」であるかを見てます。
.*(172\.(1[6-9]|2[0-9]|3[01])\.[0-9]{1,3}\.[0-9]{1,3}).*\R
## Class-C
### 第1, 第2オクテットが「192.168」であるかを見てます。
.*(192\.168\.[0-9]{1,3}\.[0-9]{1,3}).*\R
# 置換後文字列
(空欄)
3-4 「特定のIPアドレス」を含む行のみを消す。
# 置換前文字列
## 「.」は正規表現の「改行を除く任意の1文字」となってしまうため「\」でエスケープする。
.*(129\.250\.35\.251).*\R
# 置換後文字列
(空欄)
4 サンプルログ内で使えそうな正規表現
4-1 年-月-日
## 簡易
20[0-9]{2}-[0-9]{2}-[0-9]{2}
## 詳細 ※月は「01~12」、日は「01~31」を指定。
20[0-9]{2}-[0-1][0-9]-(0[1-9]|[1-2][0-9]|3[0-1])
4-2 時:分:秒
## 簡易
[0-9]{2}:[0-9]{2}:[0-9]{2}
## 詳細 ※時は「00~23」、分と秒は「00~59」を指定。
([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])
4-3 ポート番号とかの数字をHITさせる場合、前後に「半角空白」を付けると楽です。
# ポート番号: 443
\s443\s ※「\s」は半角空白を含む、空白文字。タブとか改行コードにも反応する。
443 ※前後に「半角空白を付ける」
# 詳細 ※半角空白を前後に含むけど、半角空白部分は選択されない。
(?<=^|\s)443(?= |/)