0

我有一个包含以下内容的 csv 文件:

INTERB-MNT,2008-09-10T21:05:38Z,2008-09-10T21:05:38Z,MARIA

如何使用sed和 替换字符'T''Z'使文件内容更改为以下内容?:

INTERB-MNT,2008-09-10,21:05:38,UTC,2008-09-10,21:05:38,UTC,MARIA

我尝试了以下方法,但显然我遗漏了一些东西,因为这不会产生预期的结果:

sed -e 's/[0-9]{4}-[0-9]{2}-[0-9]{2}.T.[0-9]{2}:[0-9]{2}:[0-9]{2}Z/[0-9]{4}-[0-9]{2}-[0-9]{2},[0-9]{2}:[0-9]{2}:[0-9]{2}UTC/g'

4

1 回答 1

0

要在替换后保留文本,您必须使用括号捕获输入,然后使用\1through\9来引用替换部分中捕获的匹配项。为了能够\1通过\9反向引用使用,您必须使用-Eor-r选项。

该命令将如下所示:

sed -r 's/(.+)T(.+)Z/\1,\2,UTC/g'

但这不能用:T将匹配字符串的最后一部分,因为(.+)它是贪婪的。所以你的匹配2008-09-1021:05:38模式的想法是好的。你最终得到了这个:

sed -r 's/([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}:[0-9]{2})Z/\1,\2,UTC/g'

这行得通。你也可以使用这个更简单的命令:

sed -r 's/(....-..-..)T(..:..:..)Z/\1,\2,UTC/g'

它更容易读写,而且误报的可能性很小。这取决于您的需求。

于 2016-08-10T14:16:11.640 回答