Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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_Replace_Sed_Escaping - Fatal编程技术网

Regex 使用sed转义单引号和双引号。天啊,找到了,沙格斯

Regex 使用sed转义单引号和双引号。天啊,找到了,沙格斯,regex,replace,sed,escaping,Regex,Replace,Sed,Escaping,我有一个类似的命令: find ./ -type f | xargs gsed -i -r 's/[$][A-Za-z_\'"]/testing 我想让这个命令生效。不幸的是,单引号和双引号打断了命令。如何转义此字符串并使此命令生效 这个问题与这个问题不同,因为我在[中有一个单引号。但是如果稍加修改就能解决问题,我想知道 我用@、#、\,尝试了几种不同的方法,但没有成功。您不能在单引号中使用单引号。您可以: 结束单引号,然后使用反斜杠引号:“…”\“ 结束单引号,然后在双引号中使用单引号:“…

我有一个类似的命令:

find ./ -type f | xargs gsed -i -r 's/[$][A-Za-z_\'"]/testing
我想让这个命令生效。不幸的是,单引号和双引号打断了命令。如何转义此字符串并使此命令生效

这个问题与这个问题不同,因为我在[中有一个单引号。但是如果稍加修改就能解决问题,我想知道


我用@、#、\,尝试了几种不同的方法,但没有成功。

您不能在单引号中使用单引号。您可以:

  • 结束单引号,然后使用反斜杠引号:
    “…”\“

  • 结束单引号,然后在双引号中使用单引号:
    “…”

  • 看看这个:

    kent$  cat file
    ''''''
    """"""
    
    kent$  sed 's/\x27/single /g;s/\x22/double /g' file
    single single single single single single 
    double double double double double double 
    
    因此,将cmd更改为:

    find ./ -type f | xargs gsed -i -r 's/[$][A-Za-z_\x22\x27]/testing'
    

    注意我没有检查find/xargs部分是否正确,只是检查单引号/双引号部分。

    或者您可以尝试将sed脚本置于双引号中,并转义需要转义的内容

    gsed -i -r "s/[$][A-Za-z_'\"]/testing/" 
    

    这对我不起作用(没有错误,但没有替换)。我在mac上。@rrr您的是bsd sed。您没有
    -I
    选项。请阅读就地sub.3的手册页。使用不同的引号类型来包装表达式,而不是您正在替换的表达式。(即,在双引号中使用单引号)。如果用双引号括起来:
    sed“s/”/bla/“
    单引号
    将被替换为
    bla
    ,无需转义。(我在mac上)@rrr:双引号可能需要添加更多反斜杠,因为它们可能会开始扩展某些子字符串。