2011-10-30 3 views
8

Puis-je m'aider à exécuter la commande ci-dessous. J'ai aussi essayé d'échapper aux guillemets simples mais pas de chance.Perl regex guillemets simples

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

\ Q ... \ E ne fonctionne pas non plus – user1018279

Répondre

6

Les guillemets doubles doivent travailler:

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

Vous pouvez ou ne voulez pas un modificateur g sur ce regex. Et vous voudrez probablement faire un diff après pour vous assurer que vous n'avez pas manqué le HTML.

+0

Ceci est ce qui a fonctionné pour moi. Je voulais enlever la citation et quelques autres caractères (espaces, parenthèses, -,.) De la variable 'nom': prxchange ("s/| - | \. | \ (| \) | \ '//", - 1, nom) –

14

Le problème n'est pas avec Perl, mais avec votre shell. Pour voir ce qui se passe, essayez ceci:

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

Pour le faire fonctionner, vous pouvez remplacer chaque citation simple avec '\'', comme ceci:

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

ou vous pouvez enregistrer quelques caractères en écrivant simplement:

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

ou même simplement:

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

ou même:

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

guillemets doubles, comme suggested by mu is too short, travailleront ici aussi, mais peuvent causer des surprises indésirables dans d'autres situations, puisque de nombreux caractères généralement trouvés dans le code Perl, comme $, ! et \, ont signification particulière à la coque même à l'intérieur de guillemets doubles.

Bien sûr, une autre solution consiste à remplacer les guillemets simples dans votre regexp avec les codes octaux ou hexagonaux \047 ou \x27 au lieu:

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

Dans mon cas, la recommandation pour '\ x27' semble la plus simple et fiable - a bien fonctionné! – zeroasterisk

Questions connexes