请教一个 Linux 文本过滤问题

2019-12-24 11:29:48 +08:00
 king1688888888
# tail /var/log/secure
Dec 24 10:41:04 node1 login: pam_unix(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost= user=root
Dec 24 10:41:06 node1 login: FAILED LOGIN 1 FROM (null) FOR root, Authentication failure

以上为要过滤的内容,我想把用户名筛选出来(当前即 root ),尝试了一下都不完美,请大神指导一下如何筛选干净点,就显示用户名,不带多余内容。


#多了一个逗号
[root@node1 ~]# cat /var/log/secure | grep "FAILED LOGIN" | awk '{ print $12}'
root,

#多了“user=”
[root@node1 ~]# cat /var/log/secure | grep "authentication failure" | awk '{ print $15}'
user=root
3672 次点击
所在节点    Linux
5 条回复
Sunyanzi
2019-12-24 11:53:33 +08:00
cat /var/log/secure | sed -n -e "s/^.*pam_unix.*user=//p"
xiaochun41
2019-12-24 11:57:20 +08:00
最简单的方法,使用 sed。
第一个把 逗号 删了就行了
cat /var/log/secure | grep "FAILED LOGIN" | awk '{ print $12}' | sed 's/,//'

第二个把 user= 删掉就行了
cat /var/log/secure | grep "authentication failure" | awk '{ print $15}' | sed 's/user=//'
king1688888888
2019-12-24 12:37:11 +08:00
@Sunyanzi 感谢分享!
king1688888888
2019-12-24 12:37:25 +08:00
@xiaochun41 感谢分享!
citrix
2019-12-24 17:37:38 +08:00
grep -Po "FAILED LOGIN.+FOR \K[^,]+"  /var/log/secure

Have fun !

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/631795

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX