AWKは正規表現パターンを印刷します。

AWKは正規表現パターンを印刷します。

メールログに次の正規表現パターンを印刷しようとしています。特に角かっこの間でIDを取得しようとしています(参照のために2行目を参照)。

Mar 29 03:48:13 mx-150 clamsmtpd: 14114F: accepted connection from: 127.0.0.1
Mar 29 03:48:13 mx-150 postfix/smtpd[7445]: connect from unknown[127.0.0.1]
Mar 29 03:48:13 mx-150 spamd[15674]: prefork: child states: II

次のコマンドを使用します。

awk '/\[\d+\]/ { print }' maillog

~によるとhttps://regex101.com/r/pL7kN2/11つの一致を得ましたが、awkは何も返しません。なぜそんなことですか?

ベストアンサー1

perl(正規表現の代わりに)標準正規表現を試してください。これにより、一致する行が印刷されます。

awk '/\[[[:digit:]]+\]/ { print }' maillog

括弧内に一致する値を抽出して印刷するには、次のようにします。

awk 'match($0,/\[[[:digit:]]+\]/) { print substr($0,RSTART+1,RLENGTH-2)}' maillog

おすすめ記事