技术解析

请教一个 Linux 文本过滤问题
0
2021-06-18 18:02:12
idczone
# 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 ),尝试了一下都不完美,请大神指导一下如何筛选干净点,就显示用户名,不带多余内容。


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

#多了“user=”
[[email protected] ~]# cat /var/log/secure | grep "authentication failure" | awk '{ print $15}'
user=root
cat /var/log/secure | sed -n -e "s/^.*pam_unix.*user=//p"

最简单的方法,使用 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=//'

感谢分享!

感谢分享!

grep -Po "FAILED LOGIN.+FOR \K[^,]+"  /var/log/secure
Have fun !

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服