2010/11/10 victor santana <[email protected]>: > Hola a t...@s tengo que hacer una sustitución masiva de una linea que se > repite en muchas páginas. Pero tengo el problema que no me lo está haciendo > al ejecutar el siguiente comando: > find . -type f -name '*.php' | xargs sed -i 's#<base href="http://<? echo > $_SERVER\['SERVER_NAME'\]; ?>/es/" />#<base > href="http://<?=$_SERVER\['SERVER_NAME'\]?>/" > />#g' *.php > > Al principo mi problema era escapar las barras / para la sustitución, como > veis lo conseguí sustituyendo por # , luego mi problema eran los corchetes y > veis que escapé los corchetes con \ pero ahora la variable global de > php $_SERVER['SERVER_NAME'] tiene la comilla simple ' que al escapar con \' > no me está funcionando. > > ¿Alguna idea?
1. Parecería que el problema es que \' en awk es una secuencia de escape con su propio significado. Qué pasa si reemplazas las comillas simples exteriores, de la expresión que quieres ejecutar, por comillas dobles, y escapas las dobles adentro? Es decir: find . -type f -name '*.php' | xargs sed -i "s#<base href=\"http://<? echo $_SERVER\['SERVER_NAME'\]; ?>/es/\" />#<base href=\"http://<?=$_SERVER\['SERVER_NAME'\]?>/\" />#g" *.php Como ahora hay comillas dobles, puede ser necesario escapar algún otro carácter especial para el shell... Los "$"? El "*.php" del final es necesario? Como estás utilizando xargs, me parece raro. Mirar mucho estas expresiones puede ocasionar desprendimiento de córnea. 2. Otra posibilidad pero con Perl: $ cat cambiar #!/usr/bin/perl -p -i $buscar = q#<base href="http://<\? echo \$_SERVER\['SERVER_NAME'\]; \?>/es/" />#; $reemplazar = q#<base href="http://<?=$_SERVER['SERVER_NAME']?>/" />#; s/$buscar/$reemplazar/g; $ cat prueba.dat AAA<base href="http://<? echo $_SERVER['SERVER_NAME']; ?>/es/" />AAA BBB<base href="http://<? echo $_SERVER['SERVER_NAME']; ?>/es/" />BBB CCC<base href="http://<? echo $_SERVER['SERVER_NAME']; ?>/es/" />CCC $ ./cambiar prueba.dat $ cat prueba.dat AAA<base href="http://<?=$_SERVER['SERVER_NAME']?>/" />AAA BBB<base href="http://<?=$_SERVER['SERVER_NAME']?>/" />BBB CCC<base href="http://<?=$_SERVER['SERVER_NAME']?>/" />CCC -- Eduardo Grosclaude Universidad Nacional del Comahue Neuquen, Argentina _______________________________________________ CentOS-es mailing list [email protected] http://lists.centos.org/mailman/listinfo/centos-es
