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 :)
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
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
Dios, una pregunta de linux que yo podia responder con tan solo 5 clases en la uni. Gracias Pedrero!!!!
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 ?
trecemilsetecientoscuarentaytres
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
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.