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

Anu*_*lok 6 unix bash shell sed

我对sed正则表达式非常新,并坚持要求.我从数据库中提取的记录很少

"姓名""年龄""来自ABC""12"

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

这给了我结果

"姓名", "年龄", "从,ABC", "12"

这是除非它已经插入第三列精细,空间现在我要插入,在双引号之间.

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

使用正则's/"[[:space:]]\+"/","/g'表达式我能够得到"Name","Age","From,ABC","12"但是当"Name","","From,ABC","12"它有它给它时它失败了"Name",",","From,ABC","12"

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

mat*_*tch 6

替换" "",":

sed 's/"[[:space:]]\+"/","/g'
Run Code Online (Sandbox Code Playgroud)

编辑抓住多个空间


Pab*_*blo 2

我会这样做:

echo \"Name\"     \"Age\" \"From ABC\" \"12\" | sed -e 's/"[[:space:]]\+"/","/g'
Run Code Online (Sandbox Code Playgroud)

返回

"Name","Age","From ABC","12"
Run Code Online (Sandbox Code Playgroud)

编辑

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

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

返回

"Name"," ","Age","From ABC","12"
Run Code Online (Sandbox Code Playgroud)

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