请教一个 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 !