2011-10-30 17 views
8

¿Alguna vez me puede ayudar a ejecutar el comando a continuación? También traté de escapar de las comillas simples, pero no tuve suerte.Cita simple de Perl regex

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

\ Q ... \ E también no funciona – user1018279

Respuesta

6

Las comillas dobles deben trabajar:

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

Usted puede o no puede desear un modificador g en esa expresión regular. Y es probable que desee hacer un diff después para asegurarse de que no destruyó el HTML.

+0

Esto es lo que funcionó para mí Quise eliminar la cita y algunos otros caracteres (espacios, paréntesis, -,.) De la variable 'nombre': prxchange ("s/| - | \. | \ (| \) | \ '//", - 1, nombre) –

14

El problema no es con Perl, sino con su caparazón. Para ver lo que está pasando, intente esto:

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

para hacer que funcione, puede reemplazar cada una comilla simple con '\'', así:

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

o puede ahorrar unos cuantos caracteres escribiendo simplemente:

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

o incluso sólo:

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

o incluso:

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

Las comillas dobles, como suggested by mu is too short, trabajarán también en este caso, pero pueden causar sorpresas no deseadas en otras situaciones, ya que muchos personajes encuentran comúnmente en código Perl, como $, ! y \, tienen significado especial para el caparazón incluso dentro de comillas dobles.

Por supuesto, una solución alternativa es reemplazar las comillas simples en su expresión regular con los octales o hexadecimales códigos \047 o \x27 su lugar:

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

En mi caso, la recomendación para '\ x27' parece la más simple y confiable, ¡funcionó muy bien! – zeroasterisk