Perl 正则表达式 单引号

发布于 2024-12-12 22:20:31 字数 130 浏览 0 评论 0原文

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

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

Can someome help me to run the command below. I also tried to escape the single quotes but no luck.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

万劫不复 2024-12-19 22:20:31

问题不在于 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'//

双引号,正如 mu 建议的那样太短,在这里也可以工作,但在其他情况下可能会导致不必要的意外,因为 Perl 代码中常见的许多字符,如 $! 和 < code>\,即使在双引号内,对 shell 也有特殊含义。

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

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

The problem is not with Perl, but with your shell. To see what's happening, try this:

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

To make it work, you can replace each single quote with '\'', like this:

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

or you can save a few characters by writing just:

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

or even just:

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

or even:

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

Double quotes, as suggested by mu is too short, will work here too, but can cause unwanted surprises in other situations, since many characters commonly found in Perl code, like $, ! and \, have special meaning to the shell even inside double quotes.

Of course, an alternative solution is to replace the single quotes in your regexp with the octal or hex codes \047 or \x27 instead:

$ perl -pi.bak -e 's/Object\.prototype\.myString=\x27q\x27//' myfile.html
听风念你 2024-12-19 22:20:31

双引号应该有效:

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

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

Double quotes should work:

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

You may or may not want a g modifier on that regex. And you'll probably want to do a diff after to make sure you didn't mangle the HTML.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文