我有一個要求將格式「2017年9月1日」格式轉換爲shell腳本中的01.09.2017。 ,這也適用於任何帶有後綴「st,nd,rd,th」的日期。我試過使用sed命令,但沒有運氣。 請任何人都可以幫忙!!!!格式'2017年9月'格式轉換爲dd.mm.yyyy格式在shell中
很多預先感謝。
我有一個要求將格式「2017年9月1日」格式轉換爲shell腳本中的01.09.2017。 ,這也適用於任何帶有後綴「st,nd,rd,th」的日期。我試過使用sed命令,但沒有運氣。 請任何人都可以幫忙!!!!格式'2017年9月'格式轉換爲dd.mm.yyyy格式在shell中
很多預先感謝。
$ 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
現在適用。非常感謝 – Dev
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
謝謝。但是我怎樣才能使它在任何日期st/nd/rd/th通用? – Dev
@Nam,看我的更新 – RomanPerekhrest
謝謝羅馬。它在我將參數傳遞爲「2017年9月1日」時起作用,但如果值處於管道分隔文件中,則它不會替換日期。請幫忙! – Dev
歡迎來到SO,請展示您的編碼工作。 – Cyrus