繁体   English   中英

使用sed命令查找并替换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM