我有一个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'
答案 0 :(得分:0)
要在替换后保留文本,您必须使用parens捕获输入,然后使用\1
到\9
来引用替换部分中捕获的匹配。为了能够使用\1
到\9
反向引用,您必须使用-E
或-r
选项。
命令如下所示:
sed -r 's/(.+)T(.+)Z/\1,\2,UTC/g'
但是无法使用:T
将匹配字符串的最后一部分,因为(.+)
是贪婪的。因此,匹配2008-09-10
和21: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'
读写更容易,误报的可能性很小。这取决于你的需求。