[英]find and replace using sed command
我想在双引号之间找到单引号'
,并使用sed命令将其替换为(反斜杠单引号单引号) \\' '
。
输入= 'gender':"Men's",'colour':'Red','name':"Men's levi's"
输出= 'gender':"Men\\' 's",'colour':'Red','name':"Men\\' 's levi\\' 's"
我尝试在这里用管道替换逗号,但是当尝试用\\' '
替换单引号时,它不起作用:
sed 's/(\"[^"\'']\{1,\}),([^"\'']\{1,\}\")/\1 | \2/g' test.csv
这是使用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"
使用用于多字符RS和RT的GNU awk,您所需要做的就是:
$ awk -v RS='"[^"]+"' '{gsub(/\047/,"\\\047 \047",RT); ORS=RT} 1' file
'gender':"Men\' 's",'colour':'Red','name':"Men\' 's levi\' 's"
使用sed
您可以执行以下操作:
sed -e ":a"
-e "s/'\([^\\\":]*\(\\.[^\\\":]*\)*\"\)/\\\\\f \f\1/"
-e "ta"
-e "s/\\\\\f \f/\\\' '/g" file
换行和缩进是为了提高可读性。 重点是,您首先匹配单引号,然后再跟双引号(可能不会立即),将其替换为\\\\\\f \\f
( \\\\
文字反斜杠, \\f
换页符),可以完成相同的操作使用循环( t
),然后用所需的字符串替换以前的替换。 主正则表达式还应注意双引号字符串中转义的双引号,但如果其中包含冒号:
或逗号,
则它将失败。
单线:
sed -e ":a" -e "s/'\([^\\\":]*\(\\.[^\\\":]*\)*\"\)/\\\\\f \f\1/" -e "ta" -e "s/\\\\\f \f/\\\' '/g" file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.