【问题标题】:Perl regex single quotePerl 正则表达式单引号
【发布时间】:2011-12-18 09:37:03
【问题描述】:

有人可以帮我运行下面的命令吗?我也试图逃避单引号,但没有运气。

perl -pi.bak -e 's/Object\.prototype\.myString='q'//' myfile.html

【问题讨论】:

    标签: regex perl shell


    【解决方案1】:

    问题不在于 Perl,而在于您的 shell。要查看发生了什么,请尝试以下操作:

    $ echo 's/Object\.prototype\.myString='q'//'
    s/Object\.prototype\.myString=q//
    

    要使其正常工作,您可以将每个单引号替换为 '\'',如下所示:

    $ echo 's/Object\.prototype\.myString='\''q'\''//'
    s/Object\.prototype\.myString='q'//
    

    或者你可以只写几个字符:

    $ echo 's/Object\.prototype\.myString='\'q\''//'
    s/Object\.prototype\.myString='q'//
    

    甚至只是:

    $ echo 's/Object\.prototype\.myString='\'q\'//
    s/Object\.prototype\.myString='q'//
    

    甚至:

    $ echo s/Object\\.prototype\\.myString=\'q\'//
    s/Object\.prototype\.myString='q'//
    

    双引号,如suggested by mu is too short,在这里也可以使用,但在其他情况下可能会导致意外,因为在 Perl 代码中常见的许多字符,如 $!\,具有特殊含义即使在双引号内也可以到 shell。

    当然,另一种解决方案是将正则表达式中的单引号替换为八进制或十六进制代码 \047\x27

    $ perl -pi.bak -e 's/Object\.prototype\.myString=\x27q\x27//' myfile.html
    

    【讨论】:

    • 就我而言,\x27 的推荐似乎是最简单可靠的——效果很好!
    【解决方案2】:

    双引号应该可以:

    perl -pi.bak -e "s/Object\.prototype\.myString='q'//" myfile.html
    

    您可能想要也可能不想要该正则表达式上的 g 修饰符。您可能需要在之后执行diff 以确保您没有破坏 HTML。

    【讨论】:

    • 这对我有用。我想从变量 'name' 中删除引号和其他一些字符(空格、括号、-、.): prxchange("s/ |-|\.|(|)|\'//", -1,名称)
    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多