La consola de Linux - sustituir un texto en un fichero
En más de una ocasión nos encontraremos con la necesidad de cambiar todas las ocurrencias de una palabra o texto de un fichero por otro. Existen varios programas que nos permiten hacerlo e incluso podemos usar la herramienta de reemplazar de nuestro editor de textos favorito. Sin embargo también podemos hacerlo desde la consola usando el comando sed. Este comando permite leer un fichero, hacer modificaciones al texto y guardarlo en otro fichero (sed es mucho más versátil que eso, pero es una buena simplificación).
Por ejemplo, para sustituir los ‘;’ por tabuladores en un fichero (el tabulador es el sÃmbolo ‘\t’) podemos usar el comando:
sed -e 's/;/\t/g' fichero_origen.txt > fichero_destino.txt
que cambiará los ‘;’ del fichero_origen.txt por tabuladores y guardará el resultado en el fichero fichero_destino.txt. Evidentemente, si queremos que los cambios se guarden en el mismo fichero basta con hacer una pequeña modificación:
sed -e 's/;/\t/g' fichero_origen.txt > fichero_origen.txt
’s/;/\t/g’ es lo que se llama una expresión regular, muy usadas en la edición de ficheros. Las expresiones regulares son un poco complicadas de aprender, pero una vez que las manejas con cierta soltura te preguntas cómo podÃas vivir sin ellas (ojo, si te lo preguntas con mucha intensidad quizá es el momento de dedicar más tiempo a tu vida social). En otro post hablaré más extensamente sobre las expresiones regulares.
Voy a completar este post con otro ejemplo; vamos a sustituir las apariciones de ‘cabeza’ por el texto ‘pie’ en un fichero:
sed -e 's/cabeza/pie/g' fichero_origen.txt > fichero_destino.txt
por si quedaba alguna duda :-).

(1 votos, media: 4 de 5)
Enero 24th, 2007 at 1:40 pm
Deberias probar los comandos antes de publicarlos en un post.
Me estoy volviendo loco de como realizar reemplazos directamente sobre el mismo fichero sin emplear uno temporal.
sed -e ’s/;/t/g’ fichero_origen.txt > fichero_origen.txt
Esto fue lo primero que se me ocurrión intentar, la consecuencia de esto es que el contenido del fichero_origen.txt es borrado.
Espero que si a alguien se le haya ocurrido seguir tu explicación no haya probado directamente sobre un fichero importante
Junio 15th, 2007 at 11:54 pm
Modificarlos y guardalos sobre si mismos, esto te sirve
http://listas.inf.utfsm.cl/pipermail/linux/2005-November/024935.html
Septiembre 30th, 2007 at 6:28 pm
uhm, meter el mismo comando, pero con dos modificadores en vez de uno, y guardarlo con otro nombre la salida, por supuesto.
Es una solución a la chapuza de post que ha echo aquà el fiera (sin ofender, pero es una chapuza que puede acarrear ciertos problemas a los que lo haya probado).
sed -e ’s/;/t/g’ fichero_origen.txt >> fichero_origen.txt
Informaros.. y “sed” buenos.