Bash - 从字符串中提取日期并重新格式化

时间:2014-07-23 10:08:59

标签: linux bash

在bash脚本中,我试图从last

获取上次登录的日期

例如:

last bob -n 1

这给了我:

bob     tty1    Fri Jul 18 10:43 - 10:43  (00:00)

wtmp begins Wed Feb  5 17:47:13 2014

然后从该字符串中提取日期,并将其插入lastb以获取自上次成功登录以来失败登录的次数。

例如:

lastb bob -t $MYLASTLOGIN

man lastb显示日期格式需要为-t YYYYMMDDHHMMSS

2 个答案:

答案 0 :(得分:0)

您可以尝试将日期字符串与grep匹配,将结果存储在变量中,使用date转换并将结果放入命令中:

LOGINDATE=$(last bob -n1 | egrep -o '[A-Z][a-z]{2} [A-Z][a-z]{2} [0-9]{1,2} [0-9]{2}:[0-9]{2}')
BLOCKDATE=$(date --date="$LOGINDATE" "+%Y%m%d%H%M%S")
lastb bob -t $BLOCKDATE

答案 1 :(得分:0)

user=bob lastb $user -t $(date -d "$(last $user | head -n 1 | tr -s '[:space:]' '\t' | cut -f 4-7)" +%Y%m%d%H%M%S)

更可读

 user=bob
last_login=$(last $user | head -n 1 | tr -s '[:space:]' '\t' | cut -f 4-7)
datetime=$(date -d "$last_login" +%Y%m%d%H%M%S)
lastb $user -t $datetime

请注意,我的last输出与您的输出略有不同,还有一个额外字段:相应地调整cut

$ last glennj -n 1
glennj   pts/7        :0               Sun Jul 20 19:01   still logged in   

wtmp begins Fri Jul  4 21:15:28 2014