2

我有一个简单的要求,我输入了likeL

4,23139,,"XYZ" 

在文本文件中,我需要像这样的输出

"4","23139","","ARCMsgEnum".

在某些情况下,我编写的命令可以正常工作:

sed 's/[0-9]*[0-9]/"&"/g' inputTestData.txt | sed s/,,/,\"\",/g 

但是有些行输入为时间戳:

4,23139,,"XYZ","2008-09-04 08:11:33.51 AM"

所以想要的输出是:

"4","23139","","XYZ","2008-09-04 08:11:33.51 AM"

但上面的命令给了我这样的输出:

"4","23139","","XYZ",""2008"-"09"-"04" "08":"11":"33"."46" AM"
4

3 回答 3

5

以下可能对您有用:

sed -e 's/"//g' -e 's/[^,]*/"&"/g' inputfile

这将首先去除引号,然后在逗号内的部分中插入引号。

举个例子:

$ echo 4,23139,,\"XYZ\",\"2008-09-04 08:11:33.51 AM\" | sed -e 's/"//g' -e 's/[^,]*/"&"/g'
"4","23139","","XYZ","2008-09-04 08:11:33.51 AM"
于 2013-10-03T13:20:07.463 回答
1

因为我想不出一个聪明健壮的方法,你可以使用:

$ sed -re 's/^[^"]/"&/' 
       -e 's/[^"]$/&"/' 
       -e 's/,,/,"",/g' 
       -e 's/([^"]),/\1",/g' 
       -e 's/,([^"])/,"\1/g' file
于 2013-10-03T13:29:32.613 回答
0

这应该适合你

sed -re 's/([0-9]+),/"\1",/g' -e 's/,,/,"",/g' inputTestData.txt

你非常接近。只需要检查后面的数字,

例如:

$ cat inputTestData.txt
4,23139,,"XYZ","2008-09-04 08:11:33.51 AM"

$ sed -re 's/([0-9]+),/"\1",/g' -e 's/,,/,"",/g' inputTestData.txt
"4","23139","","XYZ","2008-09-04 08:11:33.51 AM"

笔记

对于多个正则表达式,您不需要将一个sed输出通过管道传输到另一个。sed您可以多次使用-e选项s/../../g

于 2013-10-03T13:32:01.280 回答