关于以前的答案,我需要将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
这解决了一些问题:
不要打扰匹配的逗号; 数据的4-2-2性质应该是足够的,而第一个字段是不匹配的,因为它之前没有逗号。
在终止@
之后添加g
标志以替换所有匹配,而不仅仅是第一个。
\1
)和一个月( \2
)之间添加了一个被遗忘的/
。