Foros del Web » Administración de Sistemas » Unix / Linux »

como buscar y sustituir un texto en archivos por linea comando linux

Estas en el tema de como buscar y sustituir un texto en archivos por linea comando linux en el foro de Unix / Linux en Foros del Web. Hola, acabo de migrar una web a un nuevo hosting y cual ha sido mi sorpresa cuando donde antes era la carpeta/directorio www ahora es ...
  #1 (permalink)  
Antiguo 22/06/2012, 13:33
 
Fecha de Ingreso: noviembre-2008
Mensajes: 135
Antigüedad: 16 años, 1 mes
Puntos: 3
como buscar y sustituir un texto en archivos por linea comando linux

Hola, acabo de migrar una web a un nuevo hosting y cual ha sido mi sorpresa cuando donde antes era la carpeta/directorio www ahora es public_html

Alguien sabe en perl o en linux, como puedo escribir por linea de comandos linux para que me sustituya:
/www/ por /public_html/ en todos los archivos de una fcarpeta y todas careptas hijas (vamos recursivo)

Si esto no es posible, ¿alguna sugerencia?
Muchas gracias
  #2 (permalink)  
Antiguo 22/06/2012, 14:11
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 20 años, 3 meses
Puntos: 71
Respuesta: como buscar y sustituir un texto en archivos por linea comando linux

Algo así
Código:
perl -p -i -e 's/www/public_html/g' `find ./ -name "*.php"`
Pruebalo primero por si acaso, que lo digo de memoria...
  #3 (permalink)  
Antiguo 23/06/2012, 04:07
 
Fecha de Ingreso: noviembre-2008
Mensajes: 135
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: como buscar y sustituir un texto en archivos por linea comando linux

gracias.

Al final he utilizado:
find /path/directorio “*.txt” | xargs perl -pi -e ‘s/www/public_html/g’ y funciona pero me sustituye tanto:
www como /www/, es decir, toda aparición de www y yo quería /www/ ¿como puedo indicar el caracter / ?

si lo pongo así:
find /path/directorio “*.txt” | xargs perl -pi -e ‘s//www///public_html//g’
me devuelve error

saludos
  #4 (permalink)  
Antiguo 23/06/2012, 13:09
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 20 años, 3 meses
Puntos: 71
Respuesta: como buscar y sustituir un texto en archivos por linea comando linux

Cita:
Iniciado por lulavoy Ver Mensaje
gracias.

Al final he utilizado:
find /path/directorio “*.txt” | xargs perl -pi -e ‘s/www/public_html/g’ y funciona pero me sustituye tanto:
www como /www/, es decir, toda aparición de www y yo quería /www/ ¿como puedo indicar el caracter / ?

si lo pongo así:
find /path/directorio “*.txt” | xargs perl -pi -e ‘s//www///public_html//g’
me devuelve error

saludos
find /path/directorio “*.txt” | xargs perl -pi -e ‘s/\/www\//\/public_html\//g’

Si no recuerdo mal, para escapar carácteres especiales, se debe usar \, prueba así.
  #5 (permalink)  
Antiguo 25/06/2012, 07:40
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: como buscar y sustituir un texto en archivos por linea comando linux

¿no sería mejor aprovechar el percance y sustituir todas las referencias estáticas por una variable que guarde la ruta correcta ($_SERVER["DOCUMENT_ROOT"])? te ahorrarás muchos dolores de cabeza (te habrías ahorrado éste mismo si lo hubieses hecho antes ;) )

El comando find falla porque no estás usándolo correctamente, falta el argumento -name. Además, podés usar -exec en vez de redirigir la salida a xargs, y el delimitador no necesariamente debe ser /, en el ejemplo siguiente se usa #

Código bash:
Ver original
  1. find /ruta/a/la/carpeta -name "*.php" -exec perl -pi -e 's#/www/#/public_html/#g' {} +

Etiquetas: comando, linux, sustituir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:10.