解析lastlog的输出?

时间:2014-01-20 22:02:24

标签: linux bash

我想撤销lastlog -u 'user'输出的第四个字段但是使用cut -d' ' -f4我只能撤销第一个字段,否则输出空格。

Username         Port     From             Latest
auser            pts/31   c-73-123-11-86.h Sun Jan 19 13:52:08 -0800 2014

我想删除'Sun Jan 19 13:52:08'。考虑到我想要的行中有多个空格,并且使用具有特定下标位置的剪切将在输入不同长度的用户名时产生错误结果,我该怎么做呢?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

我相信这会做你要求的事情

lastlog -u 'user' |  grep -v Latest | awk '{$1="";$2="";$3="";print $0 }'

在您的示例中,这将输出

Sun Jan 19 13:52:08 -0800 2014

答案 1 :(得分:1)

似乎使用任何分隔符来分隔lastlog输出是有问题的,因为某些字段可能为空:

ubuntu@ubuntu:~$ lastlog -u ubuntu
Username         Port     From             Latest
ubuntu                                     **Never logged in**
ubuntu@ubuntu:~$ 

或者你可以cut使用正确的字符数,但如果输出在新版本中发生变化,这也可能会出现问题:

ubuntu@ubuntu:~$ lastlog -u ubuntu | { read; cut -c44- ;}
**Never logged in**
ubuntu@ubuntu:~$ 

注意read只是读取并丢弃lastlog输出的第一个/标题行。

答案 2 :(得分:0)

您可以将行的长度计算到字符串Latest并在此处剪切:

$ lastlog -u $USER | (
    IFS= read -r line1
    IFS= read -r line2
    length=${#line1}
    echo "${line2::$((length - 6))}"
)

对于我的用户,它返回:

abcdef           tty1                      

(此用户没有“发件人”值)