Perl регулярное выражение одинарная кавычка - PullRequest
9 голосов
/ 31 октября 2011

Может кто-нибудь помочь мне выполнить команду ниже. Я также пытался избежать одиночных кавычек, но не повезло.

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

Ответы [ 2 ]

17 голосов
/ 31 октября 2011

Проблема не в 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
6 голосов
/ 31 октября 2011

Двойные кавычки должны работать:

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

Вы можете или не хотите модификатор g для этого регулярного выражения.И вы, вероятно, захотите сделать diff после, чтобы убедиться, что вы не искалечили HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...