【问题标题】:remove two columns from a log file从日志文件中删除两列
【发布时间】:2013-06-11 02:50:33
【问题描述】:

命令lastlog返回UsernamePortFromLatest等四个字段。

例如。

$ lastlog
Username         Port     From             Latest
root                                       **Never logged in**
daemon                                     **Never logged in**
bin                                        **Never logged in**
sys                                        **Never logged in**
sync                                       **Never logged in**
games                                      **Never logged in**

我只需要 usernamelatest 字段。

如何使用grepawk 做到这一点?

【问题讨论】:

    标签: regex sed awk grep cut


    【解决方案1】:

    输出是固定宽度的,并且不能保证字段的数量,所以我会这样做:

    $ lastlog | cut -c1-15,44-
    Username       Latest
    root           **Never logged in**
    daemon         **Never logged in**
    bin            **Never logged in**
    sys            **Never logged in**
    sync           **Never logged in**
    games          **Never logged in**
    

    在您自己的系统上针对lastlog 的给定输出进行适当调整。

    【讨论】:

    • cut 确实是这里的工作工具,但是您可以使用 awk 执行相同的操作,方法是使用 substr() 函数,即 lastlog | awk '{print substr($0,1,15),substr($0,44)}',它不那么简洁。
    【解决方案2】:

    原则上:

    lastlog | awk '{print $1,$4}'
    

    但是,您的最后一个字段由空格分隔,因此 awk 不会将其视为单个字段。如果你想要最后一部分使用cut:

    lastlog | cut -c 1-10,40- 
    

    【讨论】:

      【解决方案3】:

      GNU sed

      sed -r 's/(.{10}).{25}/\1/' file
      

      ..输出为:

      用户名 最新 root **从未登录过** 守护进程**从未登录** bin **从未登录过** sys **从未登录过** 同步**从未登录** 游戏**从未登录**

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 2019-08-25
        • 2010-11-16
        相关资源
        最近更新 更多