我正在尝试打印以下邮件日志的正则表达式模式。特别是我试图获取方括号之间的 ID(请参阅第二行以供参考)。
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/1我得到 1 场比赛,但是 awk 没有返回任何内容。这是为什么?
答案1
尝试标准正则表达式(而不是perl
正则表达式)。这将打印匹配的行:
awk '/\[[[:digit:]]+\]/ { print }' maillog
要提取并打印括号内的匹配值:
awk 'match($0,/\[[[:digit:]]+\]/) { print substr($0,RSTART+1,RLENGTH-2)}' maillog
答案2
另一种方法:
awk -F'[][]' 'NR>1{print $2}' maillog
7445
15674
答案3
如果您喜欢awk
下一个脚本,如果字符串除以[]
(这意味着它的内部),则每隔一个字段打印一次
awk -F [][] '{for(i=2;i<=NF;i+=2)print $i}' maillog
grep
但通过更简单的方式做同样的事情
grep -o '\[[^]]*\]' maillog
答案4
看你想搭配什么
awk -F"[][]" '/postfix|spamd/{print $2}' maillog