用于查找用户名的正则表达式

时间:2015-04-20 10:16:58

标签: regex perl

所以我举个例子:

Mar 22 09:05:06 test sshd[8156]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=111.111.111.111  user=root
Mar 15 06:35:01 test CRON[22947]: pam_unix(cron:session): session closed for user bogdan

我必须使用正则表达式查找用户名。我知道,单词“user”和“user =”我可以使用它:

while($linelist = <>)
{
 if($linelist =~ /(\buser[ =]{1})/)
 {
    print $1;
 }
}

但我怎样才能找到例如“bogdan”或“root”?和其他用户的名字。

1 个答案:

答案 0 :(得分:1)

{1}是多余的。

if (my ($user) = $linelist =~ /\buser[ =](.*)/) {
    print "$user\n";
}

将括号中的$ user括起来为绑定操作符创建列表上下文,因此返回$ 1。如果用户名后面可能包含某些信息,则您必须限制*(例如/\buser[ =]([^ ]*)/)。