V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
king1688888888
V2EX  ›  Linux

请教一个 Linux 文本过滤问题

  •  
  •   king1688888888 · 2019-12-24 11:29:48 +08:00 · 3678 次点击
    这是一个创建于 1795 天前的主题,其中的信息可能已经有所发展或是发生改变。
    # 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
    Sunyanzi
        1
    Sunyanzi  
       2019-12-24 11:53:33 +08:00   ❤️ 1
    cat /var/log/secure | sed -n -e "s/^.*pam_unix.*user=//p"
    xiaochun41
        2
    xiaochun41  
       2019-12-24 11:57:20 +08:00   ❤️ 1
    最简单的方法,使用 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
        3
    king1688888888  
    OP
       2019-12-24 12:37:11 +08:00
    @Sunyanzi 感谢分享!
    king1688888888
        4
    king1688888888  
    OP
       2019-12-24 12:37:25 +08:00
    @xiaochun41 感谢分享!
    citrix
        5
    citrix  
       2019-12-24 17:37:38 +08:00 via Android
    grep -Po "FAILED LOGIN.+FOR \K[^,]+"  /var/log/secure

    Have fun !
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2794 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:32 · PVG 10:32 · LAX 18:32 · JFK 21:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.