Perl正则表达式单引号

use*_*279 9 regex shell perl

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

perl -pi.bak -e 's/Object\.prototype\.myString='q'//' myfile.html
Run Code Online (Sandbox Code Playgroud)

Ilm*_*nen 17

问题不在于Perl,而在于你的shell.要了解发生了什么,请尝试以下方法:

$ echo 's/Object\.prototype\.myString='q'//'
s/Object\.prototype\.myString=q//
Run Code Online (Sandbox Code Playgroud)

为了使它工作,您可以用以下代码替换每个单引号'\'':

$ echo 's/Object\.prototype\.myString='\''q'\''//'
s/Object\.prototype\.myString='q'//
Run Code Online (Sandbox Code Playgroud)

或者您可以通过以下方式保存几个字符:

$ echo 's/Object\.prototype\.myString='\'q\''//'
s/Object\.prototype\.myString='q'//
Run Code Online (Sandbox Code Playgroud)

甚至只是:

$ echo 's/Object\.prototype\.myString='\'q\'//
s/Object\.prototype\.myString='q'//
Run Code Online (Sandbox Code Playgroud)

甚至:

$ echo s/Object\\.prototype\\.myString=\'q\'//
s/Object\.prototype\.myString='q'//
Run Code Online (Sandbox Code Playgroud)

双引号,因为穆建议过短,会在这里工作过,但可以在其他情况下造成不必要的意外,因为许多常用的字符在Perl代码中发现,像$, !\有特殊意义的外壳甚至内部双引号.

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

$ perl -pi.bak -e 's/Object\.prototype\.myString=\x27q\x27//' myfile.html
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,对 `\x27` 的推荐似乎是最简单和可靠的——效果很好! (2认同)

mu *_*ort 6

双引号应该有效:

perl -pi.bak -e "s/Object\.prototype\.myString='q'//" myfile.html
Run Code Online (Sandbox Code Playgroud)

您可能想要也可能不想g在该正则表达式上使用修饰符.你可能想要做一个diff事后确保你没有破坏HTML.