使用grep查找用户名

时间:2017-09-17 23:01:06

标签: bash

我有一个日志文件,有数千次用户登录尝试,我需要找到失败的登录尝试,并列出失败尝试的用户名。

失败的尝试都标有" input_userauth_request"。所以我开始使用:

grep" input_userauth_request" file.txt列出了所有看起来像这样的行:

userauth_request:无效的用户nagios [preauth]

userauth_request:无效的用户学生[preauth]

userauth_request:无效的用户销售[preauth]

现在我需要列出用户名,但我无法弄清楚如何打印这些用户名。所以基本上我需要弄清楚如何打印:

的nagios

学生

销售

任何帮助都将非常感谢!!

3 个答案:

答案 0 :(得分:0)

只需通过cut获取name字段,grep .放弃空行,然后转到sort -u以获得唯一结果:

grep "userauth_request" file.txt | cut -d' ' -f4 | grep . | sort -u

你会得到:

nagios
sales
student

答案 1 :(得分:0)

将此作为测试文件:

$ cat file.txt
userauth_request: invalid user nagios [preauth]
userauth_request: invalid user student [preauth]
userauth_request: invalid user sales [preauth]

这个awk命令检索用户名:

$ awk '/userauth_request/ {print $4}' file.txt
nagios
student
sales

如何运作

  • /userauth_request/

    这会选择与正则表达式 userauth_request`匹配的行

  • print $4

    对于选定的行,将打印第四个字段。

改进

如果file.txt很大,则可能会有重复的名称。如果要删除重复的名称:

$ awk '/userauth_request/ {print $4}' file.txt | sort -u
nagios
sales
student

如果您希望计算每个学生尝试登录失败的次数:

$ awk '/userauth_request/ {print $4}' file.txt | sort | uniq -c
      1 nagios
      1 sales
      1 student

答案 2 :(得分:0)

如果您的grep具有类似gnu grep 3.1的Perl Regex支持(PCRE),那么您可以执行以下操作:

$ cat file1
userauth_request: invalid user nagios [preauth]
userauth: succesful user george [auth]
userauth_request: invalid user student [preauth]
userauth_request: invalid user sales [preauth]

$ grep -Po 'userauth_request:.*user \K.[^[]*' file1
nagios 
student 
sales 

-P启用PCRE
-o仅返回匹配的模式而不是整行(grep default)
\K意味着忘记到目前为止的一切,并期待着 .[^[]*表示捕获所有字符,直至首次找到[(不包括此[字符)