我是来自以下系统的字符串: “3月4日11:56:54 nxecopapp ftpd [20773]:[ID 44443 auth.error]无法打开模块:stat(/usr/lib/security/pam_unix_session.so.1)失败:没有这样的文件或目录”< / p>
我需要一个匹配 ftpd 和 auth.error 和 pam_unix_session.so.1 的perl正则表达式,即全部三个
答案 0 :(得分:3)
由于订单似乎是固定的,你需要组成这样的匹配:首先匹配ftpd
,然后是任意数量的字符,可能为零,然后是auth.error
,然后是任意数量的字符,可能为零,然后是pam_unix_session.so.1
。
这直接转换为正则表达式。转换程序留给读者练习。 : - )
答案 1 :(得分:2)
试试这个:
m/ftpd|auth\.error|pam_unix_sessions\.so\.1/
修改强>
对不起,我匆匆读完,上面会匹配或,相反,你需要这个来匹配它们:
m/(?=.*ftpd)(?=.*auth\.error)(?=.*pam_unix_session\.so\.1).*/
答案 2 :(得分:1)
(?=.*ftpd)(?=.*auth\.error)(?=.*pam_unix_session\.so\.1).*$
您可以在rubular
上在线验证答案 3 :(得分:1)
use warnings;
use strict;
my $s = 'Mar 4 11:56:54 nxecopapp ftpd[20773]: [ID 44443 auth.error] unable to open module: stat (/usr/lib/security/pam_unix_session.so.1) failed: No such file or directory';
if ($s =~ /ftpd .* auth\.error .* pam_unix_session\.so\.1/x) {
print "match\n";
}
请参阅:perlre