我希望在双引号之间找到单引号'
,并使用sed命令将其替换为(反斜杠单引号单引号)\' '
。
input = 'gender':"Men's",'colour':'Red','name':"Men's levi's"
output = 'gender':"Men\' 's",'colour':'Red','name':"Men\' 's levi\' 's"
我试过这个,我可以用管道替换逗号但是当试图用\' '
替换单引号时,它不起作用:
sed 's/(\"[^"\'']\{1,\}),([^"\'']\{1,\}\")/\1 | \2/g' test.csv
答案 0 :(得分:3)
以下是使用awk
:
awk 'BEGIN{FS=OFS=","} {
for (i=1; i<=NF; i++)
if (split($i, a, / *: */) == 2 && a[2] ~ /^"/) {
gsub("\047", "\\\047 \047", a[2])
$i=a[1] ":" a[2]
}
} 1' file
'gender':"Men\' 's",'colour':'Red','name':"Men\' 's levi\' 's"
答案 1 :(得分:3)
使用GNU awk进行多字符RS和RT,您只需要:
$ awk -v RS='"[^"]+"' '{gsub(/\047/,"\\\047 \047",RT); ORS=RT} 1' file
'gender':"Men\' 's",'colour':'Red','name':"Men\' 's levi\' 's"
答案 2 :(得分:0)
使用sed
,你可以这样做:
sed -e ":a"
-e "s/'\([^\\\":]*\(\\.[^\\\":]*\)*\"\)/\\\\\f \f\1/"
-e "ta"
-e "s/\\\\\f \f/\\\' '/g" file
换行符和缩进是为了便于阅读。重点是您首先匹配后跟双引号的单引号(可能不会立即匹配),将其替换为\\\f \f
(\\
字面反斜杠,\f
表单Feed )使用循环(t
)执行相同的操作,然后使用所需的字符串替换先前的替换。主正则表达式也会使用双引号字符串中的转义双引号进行处理,但如果其中包含冒号:
或逗号,
则会失败。
一衬垫:
sed -e ":a" -e "s/'\([^\\\":]*\(\\.[^\\\":]*\)*\"\)/\\\\\f \f\1/" -e "ta" -e "s/\\\\\f \f/\\\' '/g" file