Это можно легко сделать с помощью GNU awk с помощью его функций времени ( mktime и strftime ), но sed тоже может это сделать
sed '
/^[0-9]/{ #for last field with date
y|-|/|
s/^/date +"%B %d, %Y" -d /e #reformat string by date
b #go to end (print)
}
s/\(.*\)\s/\1\n/ #separate last field
P #print string without last field
D #operate just last field from start
' original.file |
paste - - > new.file
Это буквальное значение ^
. В этом случае он передается в egrep
, который принимает расширенные регулярные выражения, своего рода способ указания шаблона для сопоставления в данной строке (что-то вроде подстановки / подстановочных знаков, но гораздо более мощного). ^
просто означает «Это должно быть в начале строки / строки». Таким образом, в этом случае он будет соответствовать каждой строке в / etc / passwd, которая начинается с содержимого переменной «username».
(Обратите внимание, здесь есть потенциальная ошибка, потому что, если есть user rich и richard, ввод имени пользователя rich также будет соответствовать richard.)