我要求以格式转换日期" 2017年9月1日"在shell脚本中到01.09.2017。 并且这应适用于带有后缀" st,nd,rd,th"的任何日期。我尝试使用sed命令,但没有运气。 请任何人帮忙!!!!
非常感谢提前。
答案 0 :(得分:0)
sed + 日期解决方案:
d="1st September 2017"
date -d"$(sed -E 's/^([0-9]+)(st|nd|rd|th)/\1/' <<<$d)" +"%d/%m/%Y"
01/09/2017
要使其可重复使用,您可以创建如下函数:
convert_date () { date -d"$(sed -E 's/^([0-9]+)(st|nd|rd|th)/\1/' <<<$1)" +"%d/%m/%Y"; }
用法:
convert_date "1st September 2017"
01/09/2017
convert_date "25th October 2017"
25/10/2017
答案 1 :(得分:0)
$ cat file
1st September 2017
$ awk '{printf "%02d.%02d.%04d\n", $1+0, (index("JanFebMarAprMayJunJulAugSepOctNovDec",substr($2,1,3))+2)/3, $3}' file
01.09.2017
鉴于你在帖子的其他地方有关管道分隔输入的评论(下一次在你的问题中包含简明,可测试的样本输入和预期输出,所以我们不会猜测你的要求):
$ cat file
foo|1st September 2017|bar
$ cat tst.awk
BEGIN { FS=OFS="|" }
{
split($2,d," ")
mth = (index("JanFebMarAprMayJunJulAugSepOctNovDec",substr(d[2],1,3))+2)/3
$2 = sprintf("%02d.%02d.%04d", d[1]+0, mth, d[3])
print
}
$ awk -f tst.awk file
foo|01.09.2017|bar