Вот конвейер, который делает то, что вы хотите.Это, конечно, не просто, но с учетом каждого компонента это можно понять:
echo "20190213043348" | \
sed -e 's/\([[:digit:]]\{4\}\)\([[:digit:]]\{2\}\)\([[:digit:]]\{2\}\)\([[:digit:]]\{2\}\)\([[:digit:]]\{2\}\)\([[:digit:]]\{2\}\)/\1-\2-\3 \4:\5:\6/' | \
xargs -d '\n' date -d | \
xargs -d '\n' date -u -d
Первая строка просто печатает строку даты, чтобы sed мог отформатировать ее (чтобы ее можно было легко изменить, чтобы она соответствовалакак вы передаете строку).
Вторая строка с sed
преобразует строку из заданного вами формата во что-то вроде этого, которое может быть проанализировано с помощью date
: 2019-02-13 04:33:48
Затем мы передаем дату в date
, используя xargs
, и она форматирует ее с указанием часового пояса устройства, на котором выполняется скрипт (в моем случае CST): Wed Feb 13 04:33:48 CST 2019
Последняя строка преобразует строку даты, заданную первым вызовом date
, в UTC время, а не застревает по местному времени: Wed Feb 13 10:33:48 UTC 2019
Если вы хотите, чтобы она была в другом формате, вы можете изменитьокончательный вызов date
с использованием аргумента +FORMAT
.