業務で使うネタを教材にして勉強していけば、やった結果が目に見えてわかるだろうと思った。
まずは、UNIXコマンドでいうところのgrepとsedをperlでやってみた。
※さっきウソ書いてしまいました。
正 $ perl -ne 'print if (m/session (opened|closed)/)' /var/log/messages
誤 $ perl -ne 'print if (m/session [opened|closed]/)' /var/log/messages
[]でくくっちゃうと、「session odc」なんていうログも引っ掛けてしまうので、
単語単位でひっかけたいなら、文字クラス「[]」ではなく、パターングループ「()」で
引っ掛けるべきなのですね。
■ メールのログから、送信成功の行を抜き出す
$ perl -ne 'print if (m/sent/)' /var/log/maillog
Nov 8 06:00:02 intra1 postfix/local[12546]: DC72F8F839C: to=
Nov 8 06:00:02 intra1 postfix/smtp[12548]: 01DEA8F8392: to=
Nov 8 07:31:33 intra1 postfix/local[16078]: 5AFB38F8057: to=
Nov 8 07:31:34 intra1 postfix/smtp[16079]: AE9F58F824E: to=
Nov 8 09:01:01 intra1 postfix/local[19426]: 9620E8F8392: to=
Nov 8 09:01:01 intra1 postfix/local[19424]: 8F0DA8F83BB: to=
・・・
■ 正規表現を使って、sshでのログイン|ログアウトの履歴を抜き出す
$ perl -ne 'print if (m/session (opened|closed)/)' /var/log/messages
Nov 8 15:39:31 intra1 sshd(pam_unix)[1709]: session opened for user shasta by (uid=0)
Nov 8 15:40:24 intra1 su(pam_unix)[1926]: session opened for user root by shasta(uid=1000)
Nov 8 15:46:06 intra1 su(pam_unix)[1926]: session closed for user root
Nov 8 15:46:06 intra1 sshd(pam_unix)[1709]: session closed for user shasta
Nov 8 15:48:15 intra1 sshd(pam_unix)[2722]: session opened for user shasta by (uid=0)
Nov 8 15:48:28 intra1 su(pam_unix)[2947]: session opened for user root by shasta(uid=1000)
Nov 8 15:48:46 intra1 su(pam_unix)[2947]: session closed for user root
Nov 8 15:48:54 intra1 sshd(pam_unix)[2722]: session closed for user shasta
・・・
■ ログの日付を置換してみる
元のログ
Nov 8 04:02:11 intra1 syslogd 1.4.1: restart.
Nov 8 04:02:26 intra1 clamd[2689]: Database correctly reloaded (299083 signatures)
$ perl -ne 'print if (s/Nov /11//)' /var/log/messages
11/8 04:02:11 intra1 syslogd 1.4.1: restart.
11/8 04:02:26 intra1 clamd[2689]: Database correctly reloaded (299083 signatures)
置換後は上記のようになった
■ ログの小文字を大文字にしてみる
元のログ
Nov 8 04:02:11 intra1 syslogd 1.4.1: restart.
Nov 8 04:02:26 intra1 clamd[2689]: Database correctly reloaded (299083 signatures)
$ perl -ne 'print if (tr/a-z/A-Z/)' /var/log/messages
NOV 8 04:02:11 INTRA1 SYSLOGD 1.4.1: RESTART.
NOV 8 04:02:26 INTRA1 CLAMD[2689]: DATABASE CORRECTLY RELOADED (299083 SIGNATURES)
置換後は上記のようになった