在Linux bash中更改date格式

关于以前的答案,我需要将date格式从yyyy-mm-dd更改为yyyy / mm / dd。

我被给了这个答案:

sed -i 's@,\(....\)-\(..\)-\(..\) @,\1/\2/\3 @' /home/Documents/blah.csv 

这完美的工作,每行只有一个实例。 然而,一行可能有很多这些date,我如何更改sed命令,以便它检测到的每个实例(不只是第一个)。

示例文档:

 2012-09-09,123143,2012-09-09,12837,2012-09-07,2131,2012-08-06,1237 #and many more lines like that. 

运行sed命令后,我得到这个:

 2012-09-09,123143,2012/09/09,12837,2012-09-07,2131,2012-08-06,1237 

它只适用于第二个date实例,我如何使它为所有这些工作?

使用g标志来替换一行中的每一个匹配,而不仅仅是第一个匹配。 此外,第一个日期不匹配,因为它没有逗号前面。

 sed -i 's@\(....\)-\(..\)-\(..\)@\1/\2/\3/@g' /home/Documents/blah.csv 

这解决了一些问题:

  1. 不要打扰匹配的逗号; 数据的4-2-2性质应该是足够的,而第一个字段是不匹配的,因为它之前没有逗号。

  2. 在终止@之后添加g标志以替换所有匹配,而不仅仅是第一个。

  3. 在一年( \1 )和一个月( \2 )之间添加了一个被遗忘的/