我对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}}
还有其他方法可以解决这个问题吗?
答案 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。这适用于引用字符串中的引用字符(包括双引号)。