2017-09-15 57 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