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

Лучший ответ:
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

Ответ №1

Вы можете попробовать сопоставить строку даты с 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

Оцените статью
TechArks.Ru
Добавить комментарий