Как реструктурировать переменную даты в bash

Необходимо добавить RequiresMountsFor=/homeв раздел [Unit]файла.service

1
06.08.2019, 00:21
5 ответов

Вот мой упрощенный sedподход. Не особо умно, но работает:-)

$ IN=12.34.5678
$ OUT=$(echo $IN | sed 's/\(..\).\(..\).\(....\)/\3\2\1/')
$ echo $OUT
56783412
$

awkподход

$ OUT=$(echo $IN | awk -F. '{print $3$2$1}')
$ echo $OUT
56783412
$

tr/ tac/ pasteгибрид

$ OUT=$(echo $IN | tr '.' '\n' | tac | paste -s -d "")
$ echo $OUT
56783412
$
1
27.01.2020, 23:17

Вот чистый bashраствор:

$ # input is dd.mm.yyyy
$ input_date="dd.mm.yyyy"
$ # output will be yyyymmdd
$ output_date=${input_date:6:4}${input_date:3:2}${input_date:0:2}
$ echo "$output_date"
yyyymmdd
2
27.01.2020, 23:17

илиawk:

$ date=03.06.1990
$ awk 'BEGIN { FS="."; OFS="" } { tmp=$1; $1=$3; $3=tmp }1' <<< "$date"
19900603
0
27.01.2020, 23:17

Команда dateможет выводить в формате ISO8601 с модификатором:

robert@pip2:/tmp$ date
Mon Aug  5 16:09:35 PDT 2019

robert@pip2:/tmp$ date --iso-8601
2019-08-05

...тогда просто удалите дефисы между ними. Использование sed:

robert@pip2:/tmp$ date --iso-8601 | sed s/-//g
20190805
0
27.01.2020, 23:17
echo "26.11.2016" | awk -F"." '{print $3$2$1}'

Выход:20161126

1
27.01.2020, 23:17

Теги

Похожие вопросы