2

关于较早的答案,我需要将日期格式从 yyyy-mm-dd 更改为 yyyy/mm/dd。

我得到了这个答案:

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

这完美地工作,每行只有一个实例。但是,一行可以有许多这样的日期,我如何更改 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

它仅适用于第二个日期实例,我如何使其适用于所有人?

4

1 回答 1

2

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

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

这解决了几个问题:

  1. 不要费心匹配逗号;数据的 4-2-2 性质应该足够了,并且第一个字段不匹配,因为它前面没有逗号。

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

  3. /在年 ( \1) 和月 ( ) 之间添加了忘记\2
于 2013-11-01T18:37:14.977 回答