SED,AWK:更改日期格式

时间:2017-04-17 15:58:31

标签: regex bash date awk sed

美好的一天,我对更换日期感到有点新意和困惑。我想在一个巨大的文件中更改所有日期 从

  

21/3/2016

  

2016-03-21T00:00:00.008Z

我做了类似的事

sed -ri 's#([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})#date -d"\1/\2/\3"
+"%Y-%m-%dT%H:%M:%SZ"#e' file

它创建了一个文件但没有内容。 谢谢提前

3 个答案:

答案 0 :(得分:4)

使用GNU sed:

echo "21/1/2016" | sed -E 's|/([1-9])/|/0\1/|; s|^([1-9]/)|0\1|; s|([0-9]{2})/([0-9]{1,2})/([0-9]{4})|\3-\2-\1T00:00:00.008Z|'

输出:

2016-03-21T00:00:00.008Z

答案 1 :(得分:2)

只需使用awk:

$ awk -F'/' '{printf "%04d-%02d-%02dT00:00:00.008Z\n", $3, $2, $1}' file
2016-03-21T00:00:00.008Z

答案 2 :(得分:1)

在awk中:

$ awk '{
    split($0,a,"/")                            # split by / to a
    for(i=1;i<=2;i++)             
        a[i]=sprintf("%02d", a[i])             # zeropad a[1] and a[2]
    print a[3]"-"a[2]"-"a[1] "T00:00:00.008Z"  # output
}' file
2016-03-21T00:00:00.008Z