如何在 bash 中重构日期变量

如何在 bash 中重构日期变量

我有一个 bash 脚本,它采用以下格式获取用户输入的日期: dd.mm.yyyy并将其保存为变量$date

现在我需要将此变量修改为以下格式:yyyymmdd以供进一步使用。

因此不再有点,并且点之间的值从后到前。

sed例如,有没有一种简单的方法可以做这种事情?

答案1

这是一个纯粹的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

这是我的简单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
$

答案3

echo "26.11.2016" | awk -F"." '{print $3$2$1}'

输出:20161126

答案4

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

相关内容