Regex 替换未使用sed转义的双引号
我想删除所有双引号,除非它们被转义 我的例子如下:Regex 替换未使用sed转义的双引号,regex,sed,Regex,Sed,我想删除所有双引号,除非它们被转义 我的例子如下: The quick brown fox "jumps", over the 'lazy \"dog\"' 我希望达到以下结果: The quick brown fox jumps, over the 'lazy \"dog\"' 因此,我有以下命令,但它不起作用 sed -i '/^\/\"/! s/"//g' test.sql 如何编写实现目标的sed命令 关于Kim这可以是一个选项: $ sed -r 's#([^\])"#\
The quick brown fox "jumps", over the 'lazy \"dog\"'
我希望达到以下结果:
The quick brown fox jumps, over the 'lazy \"dog\"'
因此,我有以下命令,但它不起作用
sed -i '/^\/\"/! s/"//g' test.sql
如何编写实现目标的sed命令
关于Kim这可以是一个选项:
$ sed -r 's#([^\])"#\1#g' a
The quick brown fox jumps, over the 'lazy \"dog\"'
从基本的sed's#something#change#g'
,它查找任何与\+“
不同的并将其删除。它还捕获该字符((something)
)并将其打印回(\1
)
对于边缘情况,如下所示:
几个拐角处的案例,-e's/“*/”/g”在主案例处理之前
连续引号和-e s/^//`来处理初始引号
awk
版本(不是最好的方式)
在这里,它将\“
替换为\u35;
(这需要一些独特性)
然后它删除单个“
,并更改回\”
便携性较差的gnuawk版本
awk '{print gensub(/([^\\])\"/, "\\1", "g")}'
The quick brown fox jumps, over the 'lazy \"dog\"'
良好的awk
版本(便携式):
迄今为止的最佳awk
版本(便携式):
在posix sed上使用临时替换(此处为char#)
sed 's/#/#a/g;s/\\"/#b/g;s/"//g;s/#b/\\"/g;s/#a/#/g' File.ext
有没有办法避免失去狐狸和跳跃之间的空间?跳转上的s也被删除。几个角案例,-e's/“*/”/g'位于主案例之前,用于处理连续引号,-e s/^”/`用于处理初始引号。很好,@jthill,刚刚更新以显示您的建议。谢谢首先需要重复减少,当我执行命令时,修复程序是否出现以下错误。$sed-re-e's/“*/”/g'-e's/^/'-e's#([^])“#\1#g”test2.sql sed:-e expression#1,char 1:未知命令:`-'您的转义是如何定义的?
是反斜杠后跟转义引号,还是转义反斜杠后跟未转义引号?
awk '{print gensub(/([^\\])\"/, "\\1", "g")}'
The quick brown fox jumps, over the 'lazy \"dog\"'
awk '{gsub(/[^\\]"/,"&_");gsub(/"_/,x)}1'
awk '{ORS=(/\\$/?RS:x)}1' RS=\"
sed 's/#/#a/g;s/\\"/#b/g;s/"//g;s/#b/\\"/g;s/#a/#/g' File.ext