PDA

Ver la versión completa : ¿Cómo reemplazar texto en varios ficheros a la vez?



Puck2099
18/12/2005, 08:00
Hola,

Tengo que reemplazar unas rutas de un montón de Makefiles por otras rutas y me parece que debe haber alguna opción mejor que ir abriéndolos uno a uno con un editor de texto y reemplazar dichas cadenas.

¿Conocéis de algún programa (mejor si es para Linux, pero tampoco importa que sea de Windows) o comando de shell de Linux que me permita hacerlo de golpe?

Gracias :)

miq01
18/12/2005, 08:14
UltraEdit (para Windows), o eso creo: "Find in Files/Replace in Files option for UNICODE Searches". Es de pago pero hay una versión trial (http://www.ultraedit.com/index.php?name=Downloads&d_op=viewdownload&cid=1) de 30 días.

Edito: Confirmado. Lo acabo de probar.

hectorblanco
18/12/2005, 08:24
O en linux puedes hacer un script en bash que use el awk, que es muy usado para tratamiento de cadenas.
Busca algun tutorial, y eso despues lo puedes aprovechar para otras cosas.

Puck2099
18/12/2005, 08:29
Muchas gracias a los dos, además del script que me ha pasado Kaos, también he encontrado un programita de Linux, rpl, que lo hace automáticamente :)

A ver como sigue la compilación mañana, que ya es hora de acostarse :)

Saludos

kraff2
18/12/2005, 08:37
En linux puedes usar sed que es un programa de línea de comando especial para sustituir cadenas

Aquí un pequeño script para ilustrar el funcionamiento :)



#!/bin/bash
a=`ls a*.txt `

for i in $a
do
sed 's/\\Carlos/\\Rafa/g' $i > $i.new
done


En todo los archivos del directorio donde se ejecute que sean a*.txt cambia la cadena \Carlos por \Rafa. Los archivos resultantes tienen el mismo nombre que el original con el .new al final es decir a*.txt.new.

Una vez comprobado que funcione correctamente puedes añadir al bucle for

mv $i.new $i

Para darles de nuevo el nombre original, pero una vez estés seguro no vayas a pisar los archivos originales con archivos vacíos y suframos el foro una perdida irreparable :shock:

Pero seguro que hay alguna forma más sencilla de hacerlo, esto es solo un apaño rápido [wei4]

Un pequeño tutorial sobre el uso básico del sed en:

http://www.cs.hmc.edu/tech_docs/qref/sed.html

De todas formas si me dices los paths a cambiar te puedo preparar el script

pakoito
18/12/2005, 08:49
Dios, una pregunta de linux que yo podia responder con tan solo 5 clases en la uni. Gracias Pedrero!!!!

Uncanny
18/12/2005, 09:03
Y si quieres hacerlo comodamente sin necesidad de sed, rpl, awk o crearte un script para usar estos comandos de forma más automatizada, tienes KFileReplace (http://kfilereplace.kdewebdev.org/) y es que esto de KDE y KParts es una gozada :D

general9000
23/06/2010, 17:48
Disculpen por revivir el post pero google me mando aqui :)

que pasa si quiero reemplazar direcciones U_R_L

por ejemplo si hago


[root@server src]# sed -e 's/ http : //w w w. direc cion1 .com/index.jsp / ht t ps: //w w w. direccion2. com/index2.jsp / g' test11 .html > test11 .html .new

me bota el siguiente error

sed: couldn't open file ww / ht t p s://w wws /g: No such file or directory


dentro de test11 .html hay muchas direcciones web

he intentado poner las direcciones web entre "" , '' , ´´ sin tener exito
alguien me puede ayudar ?

nandove
23/06/2010, 17:59
trecemilsetecientoscuarentaytres

kraff2
23/06/2010, 18:02
Buen reflote jeje ;)

El error que te da es debido a los caracteres especiales de la url / para solucionarlo debes ejecutar la orden de la siguiente forma:



sed -e 's/http:\/\/www.direccion1.com/https:\/\/www.direccion2.com/g' test11.html > test11.html.new

general9000
23/06/2010, 18:18
muchas gracias por tu respuesta n_n ^^ :)

GameMaster
23/06/2010, 20:10
Yo utilizo el Notepad++. Va de lujo.

SplinterGU
23/06/2010, 22:16
para no tener que usar un temporal con el sed esta el parametro -i, si tenemos por ejemplo, subcarpetas con Makefile en el primer nivel de directorios, podemos hacer:

sed -i 's/lalala/newlala/g' */Makefile

o tambien si necesitamos incluir '/' en la string, podemos escapear con '\' o usar ',' de separador

sed -i 's,lalala,newlala,g' */Makefile


lalala es la string a buscar
newlala la string nueva