Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 替换未使用sed转义的双引号_Regex_Sed - Fatal编程技术网

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;
(这需要一些独特性)
然后它删除单个
,并更改回
\”


便携性较差的gnu
awk版本

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