Как Дэн упоминает в своем ответе , команду Gnu date(1)
можно задан параметр -d
с датой или отметкой времени, который он будет рассматривать как дата, которую необходимо вывести. (Это недоступно в POSIX или BSD. date(1)
команды, однако.)@1571806800
— это формат, используемый для укажите целое число time_t
.
Вот функция оболочки Bash, которая действует как фильтр, читая строки из ввод, предполагая, что любое слово, начинающееся со строки, состоящей только из цифр, является отметку времени и преобразовать ее в удобочитаемый -вывод в одном из моих любимые форматы.
ts2hr() {
while read n rest; do
if [[ $n =~ ^[0-9][0-9]*$ ]]; then
echo "$(date -d @"$n" +"%Y-%m-%d %T")" "$rest"
else
echo "$n" "$rest"
fi
done
}
Вот как выглядят некоторые входные и выходные данные:
ts2hr <<____
1571806123 first line
# A comment?
1571720456 second date's here
Just a regular sentence.
1571547789 The last line.
____
2019-10-23 13:48:43 first line
# A comment?
2019-10-22 14:00:56 second date's here
Just a regular sentence.
2019-10-20 14:03:09 The last line.
Вы можете настроить функцию по мере необходимости для обработки конкретного ввода. и форматы вывода, которые вам нужны, а также инструменты, которые у вас есть доступный. Вышеупомянутая функция является Bash главным образом потому, что оператор =~
упростили сопоставление с образцом; если вам это нужно в оболочке Bourne, вы придется закодировать чек по-другому, если он вам вообще нужен.