Hola a tod@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?
2010/11/10 victor santana reparaciononline@gmail.com:
Hola a tod@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