有人可以帮我运行下面的命令.我也试图逃避单引号但没有运气.
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)
双引号应该有效:
perl -pi.bak -e "s/Object\.prototype\.myString='q'//" myfile.html
Run Code Online (Sandbox Code Playgroud)
您可能想要也可能不想g
在该正则表达式上使用修饰符.你可能想要做一个diff
事后确保你没有破坏HTML.