我有一个简单的要求,我输入了像
4,23139,,"XYZ"
在文本文件中,我需要像
这样的输出"4","23139","","ARCMsgEnum".
我写的命令在某些情况下运行正常:
sed 's/[0-9]*[0-9]/"&"/g' inputTestData.txt | sed s/,,/,\"\",/g
但有些行的输入为timestamp:
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"
答案 0 :(得分:3)
以下内容可能适合您:
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"
答案 1 :(得分:1)
因为我无法想到一种聪明的健壮方式,你可以使用:
$ sed -re 's/^[^"]/"&/'
-e 's/[^"]$/&"/'
-e 's/,,/,"",/g'
-e 's/([^"]),/\1",/g'
-e 's/,([^"])/,"\1/g' file
答案 2 :(得分: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