2017-09-15 40 views
0

我有一个要求将格式“2017年9月1日”格式转换为shell脚本中的01.09.2017。 ,这也适用于任何带有后缀“st,nd,rd,th”的日期。我试过使用sed命令,但没有运气。 请任何人都可以帮忙!!!!格式'2017年9月'格式转换为dd.mm.yyyy格式在shell中

很多预先感谢。

+1

欢迎来到SO,请展示您的编码工作。 – Cyrus

回答

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 
+1

现在适用。非常感谢 – Dev

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 
+0

谢谢。但是我怎样才能使它在任何日期st/nd/rd/th通用? – Dev

+0

@Nam,看我的更新 – RomanPerekhrest

+0

谢谢罗马。它在我将参数传递为“2017年9月1日”时起作用,但如果值处于管道分隔文件中,则它不会替换日期。请帮忙! – Dev

相关问题