Regex Perl正则表达式单引号

Regex Perl正则表达式单引号,regex,perl,shell,Regex,Perl,Shell,有人能帮我运行下面的命令吗。我也试图逃避单引号,但没有运气 perl -pi.bak -e 's/Object\.prototype\.myString='q'//' myfile.html 双引号应该有效: perl -pi.bak -e "s/Object\.prototype\.myString='q'//" myfile.html 您可能需要也可能不需要该正则表达式上的g修饰符。您可能需要在之后执行diff,以确保不会损坏HTML。问题不在于Perl,而在于shell。要查看发生了什

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

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

双引号应该有效:

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

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

问题不在于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'//
双引号在这里也可以使用,但在其他情况下可能会导致意外,因为许多字符通常出现在Perl代码中,如
$
\
,即使在双引号内,对shell也有特殊的意义

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

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

在我的例子中,
\x27
的建议似乎是最简单、最可靠的——效果很好!这就是我的工作。我想从变量“name”中删除引号和一些其他字符(空格、括号、,):prxchange(“s/|-|-|-|-|-|-。|(|)|-|-|-|-|-|-|-|-|-|-|-|-|-