2012-06-02 14 views
1

可能重复:
Convert date formats in bash转换YYYY-MM-DDTHH:MM:SS +/- HH:在bash MM日期

我需要转换的日期,如

2012-06-01T19:05:00+02:00 

到这样的东西

01-06-2012 19:05 

理想情况下使用sedawk。我该怎么做呢?

+0

对不起,但那并不告诉我该怎么做。我确实发现过这篇文章,但我很愚蠢的让它工作。 – fabsh

+0

请通过显示为什么您尝试的操作不起作用来改进此类问题。否则,“男人1约会”是你的朋友。 –

回答

2
echo "2012-06-01T19:05:00+02:00"|sed 's/\(.*\)T\([0-9]*:[0-9]*\).*/\1 \2/' 
2012-06-01 19:05 

要它做了什么:

  • 比赛一切都交给了T和称其为\ 1后
  • 匹配的任何后续数字,后跟一个“:”,后跟任何后续数字并且是指基团作为\ 2
  • 打印一次匹配时,空间,第二匹配
+0

完美的作品!非常感谢你。 :) – fabsh

2
date -d "$(echo '2012-06-01T19:05:00+02:00' | sed 's/T/ /; s/+.*//')" '+%d-%m-%Y %H:%M' 
5

这可以在不使用sed或awk的情况下完成,因为bash本身可以完成大部分所需的字符串替换。具体来说,你只需要:

  1. 更换牛逼有一个空格,
  2. 删除您的时区信息。

日期格式的其余部分可以通过日期命令处理。

$ date_string='2012-06-01T19:05:00+02:00' 
$ date_string="${date_string/T/ }" 
$ date_string="${date_string/+*/}" 
$ date -d "$date_string" '+%d-%m-%Y %H:%M' 
01-06-2012 19:05 
+0

方括号在“T”周围并不是必需的。引号可以在参数扩展周围省略。 –

+0

@丹尼斯威廉姆森你是对的。我本来有一个更复杂的表达,其中包括一个字符类。我已经提前删除了角色类,并且删除了其中一个原始替换表达式中的无用空格,以使意图更清晰。 –

相关问题