Retroceder   Foros del Web > Temas generales de computación > Sistemas Operativos > BSD y Linux

Respuesta
 
Herramientas Desplegado
Antiguo 21-abr-2006, 02:16   #1 (permalink)
elangelcaido está en el buen camino
 
Avatar de elangelcaido
 
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 911
Exclamación Grep y replace

Hola,

Estoy intentando hacer un script que me busque en una carpeta los archivos que contenga una cadena y me la sustituya por otra.
Yo tengo esto:
Código:
grep -r \'cadenaBusca\' /micarpeta/* | replace \'cadenaBusca\' \'nuevaCadena\'
Y en principio parece que las cambia, ya que aparece el listado de los fichero que contienen 'cadenaBusca' pero con la 'nuevaCadena'. El caso es que los cambios no permanecen.

¿Alguna idea?

Gracias por la ayuda.
__________________
Ta Luego! Al final sólo puede quedar uno...
________
Surfglassy.com Surf en Asturias
lukos.org
elangelcaido está desconectado   Responder Citando
Antiguo 21-abr-2006, 04:49   #2 (permalink)
Tk421 está en el buen camino
 
Avatar de Tk421
 
Fecha de Ingreso: noviembre-2002
Ubicación: España
Mensajes: 368
Segun dice el manual de man, cito textualmente:

Cita:
replace - A utility program that is used by msql2mysql, but that has
more general applicability as well. replace changes strings in place in
files or on the standard input
. Uses a finite state machine to match
longer strings first. Can be used to swap strings.
Segun lo estas cambiando tu, logicamente te aparece la respuesta por la terminal en vez de que los cambios se hagan en los archivos.

Intenta lo siguiente (haz un backup antes, por si acaso ;)

Código:
cd micarpeta
replace cadenaBusca nuevaCadena --  *
Ojo que nunca he hexo nada de esto, lo he deducido a partir de la pagina de man

(man replace)
__________________
Tk421
Guia de restaurantes
Musica para bodas
Tk421 está desconectado   Responder Citando
Antiguo 21-abr-2006, 05:40   #3 (permalink)
elangelcaido está en el buen camino
 
Avatar de elangelcaido
 
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 911
Ya, el man del REPLACE lo he mirado, pero no lo veo muy claro. He conseguido algo:
Código:
replace cadenaBusca cadenaNueva -- `find /ruta/a/carpeta/* -name "*.php"`
Pero el problema es que no hace la modificaciones recursivamente, es decir, no modifica los archivos que se encuentran en directorios inferiores a /ruta/a/carpeta/*
Y eso que find SI hace busqueda recursiva.

¿Alguna idea?

Gracias por la ayuda.
__________________
Ta Luego! Al final sólo puede quedar uno...
________
Surfglassy.com Surf en Asturias
lukos.org
elangelcaido está desconectado   Responder Citando
Antiguo 21-abr-2006, 07:01   #4 (permalink)
Tk421 está en el buen camino
 
Avatar de Tk421
 
Fecha de Ingreso: noviembre-2002
Ubicación: España
Mensajes: 368
Código:
replace cadenaBusca cadenaNueva -- `find /ruta/a/carpeta/ | grep  -i "\.php$"`
__________________
Tk421
Guia de restaurantes
Musica para bodas
Tk421 está desconectado   Responder Citando
Antiguo 21-abr-2006, 08:26   #5 (permalink)
Colaborador
ociomax tiene algunos puntos positivos de karma
 
Avatar de ociomax
 
Fecha de Ingreso: noviembre-2002
Ubicación: Temuco, Chile
Mensajes: 5.014
Enviar un mensaje por MSN a ociomax Enviar un mensaje por Yahoo  a ociomax Enviar un mensaje por Skype™ a ociomax
¿Y por qué no usas sed? Es bastante más simple:
Código:
sed -i s/cadenaBusca/cadenaNueva/g /ruta/a/archivos/
__________________
Christian González, "OCIOMax"
http://chgonzalez.blogspot.com
ociomax está desconectado   Responder Citando
Antiguo 21-abr-2006, 11:49   #6 (permalink)
elangelcaido está en el buen camino
 
Avatar de elangelcaido
 
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 911
Puedes explicarme algo mas sobre el comando sed. Hice man sed y la verdad no entiendo muy bien para que sirve.

Gracias por la ayuda.
__________________
Ta Luego! Al final sólo puede quedar uno...
________
Surfglassy.com Surf en Asturias
lukos.org
elangelcaido está desconectado   Responder Citando
Antiguo 21-abr-2006, 11:57   #7 (permalink)
Colaborador
ociomax tiene algunos puntos positivos de karma
 
Avatar de ociomax
 
Fecha de Ingreso: noviembre-2002
Ubicación: Temuco, Chile
Mensajes: 5.014
Enviar un mensaje por MSN a ociomax Enviar un mensaje por Yahoo  a ociomax Enviar un mensaje por Skype™ a ociomax
En pocas palabras:

El parámetro "-i" le indica a Sed que realice los cambios en el mismmo archivo en lugar de dirigirlos a stdout.

"s/cadenaBusca/cadenaNueva/g" reemplaza ("s") cualquier ocurrencia de "cadenaBusca" por "cadenaNueva". La "g" es para que reemplace TODAS las ocurrencias; de lo contrario, sólo reemplazará la primera ocurrencia.
__________________
Christian González, "OCIOMax"
http://chgonzalez.blogspot.com
ociomax está desconectado   Responder Citando
Antiguo 21-abr-2006, 12:23   #8 (permalink)
elangelcaido está en el buen camino
 
Avatar de elangelcaido
 
Fecha de Ingreso: septiembre-2003
Ubicación: Oviedo
Mensajes: 911
Muchas gracias ociomax, lo probare y te cuento.
__________________
Ta Luego! Al final sólo puede quedar uno...
________
Surfglassy.com Surf en Asturias
lukos.org
elangelcaido está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 18:56.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93