Проблема не в Perl, а в вашей оболочке.Чтобы увидеть, что происходит, попробуйте следующее:
$ 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, такие как $
, !
и \
, имеют особое значение даже для оболочкивнутри двойных кавычек.
Конечно, альтернативным решением является замена одинарных кавычек в регулярном выражении восьмеричными или шестнадцатеричными кодами \047
или \x27
вместо:
$ perl -pi.bak -e 's/Object\.prototype\.myString=\x27q\x27//' myfile.html