sed模式在双引号之间插入逗号

时间:2018-02-08 16:33:04

标签: bash shell unix sed

我对sed Regex模式非常新,并坚持要求。我从数据库中提取的记录很少

  

“姓名”“年龄”“来自ABC”“12”

现在我将其导出为CSV并使用逗号分隔我正在使用's/[[:space:]]\+/,/g'此正则表达式

这给了我结果

  

“名称”, “年龄”, “从,ABC”, “12”

除了插入空间的第三列之外,哪个好 现在我想在双引号之间插入

任何一个人都能指导我吗?

使用's/"[[:space:]]\+"/","/g'正则表达式我能够获得"Name","Age","From,ABC","12"但是当我"Name","","From,ABC","12" "Name",",","From,ABC","12"时它会失败{{1}}

还有其他方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:6)

" "替换为","

sed 's/"[[:space:]]\+"/","/g'

编辑以捕捉多个空间

答案 1 :(得分:2)

我会这样做:

echo \"Name\"     \"Age\" \"From ABC\" \"12\" | sed -e 's/"[[:space:]]\+"/","/g'

返回

"Name","Age","From ABC","12"

修改

如果你想要空字符串" "也匹配,那么你可以这样做:

$ echo \"Name\" \" \"    \"Age\" \"From ABC\" \"12\" | sed -e 's/\("[[:alnum:][:space:]]*"\)/\1,/g' \
    -e 's/",[[:space:]]\+/",/g' \
    -e 's/,[[:space:]]\?$//g'

返回

"Name"," ","Age","From ABC","12"

第一条规则匹配引号中的字符串(也可能是空的),第二条规则 规则删除,和下一个"之间的空格,第三个规则将删除 最后,

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/\s+$//;s/("[^"]*(\\.[^"]*)*")\s+/\1,/g' file

删除行尾的所有空格。然后全局替换任何一对双引号字符串后跟一个空格,后跟一个逗号后面的字符串。

N.B。这适用于引用字符串中的引用字符(包括双引号)。