Remplazar texto en Linux usando sed

Hoy vamos a ver una pequeña introducción a sed en Linux. Veremos cómo remplazar texto de un archivo y enviarlo a otro archivo, enviarlo en la terminal, modificar el archivo original o recibir el texto de una tubería (mejor dicho, de la entrada estándar).

Para ello usaremos sed (stream editor) y la terminal.

Modo de uso de sed para sustituir texto

La forma básica de sustituir es:

sed s/Búsqueda/Remplazo/ nombre_archivo

Eso leerá el archivo y remplazará la primera ocurrencia de Búsqueda con Remplazo; mostrando el resultado en la terminal o, mejor dicho, en la salida estándar.

Si quieres que el remplazo sea global, pasa la opción g:

sed s/Búsqueda/Remplazo/g nombre_archivo

Recuerda que igualmente puedes omitir el nombre del archivo si vas a pasar el texto usando un pipe.

Remplazando texto con sed

Veamos el primer ejemplo. Tengo un documento de texto con lo siguiente:

Hola,tengo,comas,y,voy,a,remplazarlas,con,guiones,usando,sed

Voy a remplazar las comas por un guión, para ello ejecuto:

Sustitución de texto con sed en Linux

De este modo el texto ya modificado se imprime en la terminal.

Redirigiendo salida

Si quieres que el texto ya remplazado aparezca en otro archivo, es muy fácil; simplemente dirige la salida al mismo, usando >.

Por ejemplo, si quiero que el texto arreglado de ejercicio1.txt se vaya a ejercicio1_corregido.txt haría lo siguiente:

Remplazar texto usando sed y redireccionar salida a otro archivo

Modificar archivo directamente (inline)

Veamos otra opción. Si tú quieres que sed modifique el archivo, es decir, que el texto de salida sea escrito en el archivo de entrada, pasa la opción -i. Veamos el siguiente ejemplo:

Opción -i en sed sobre Linux

Comenzamos mostrando el contenido del archivo. Después hacemos la sustitución pero pasamos la opción -i a sed, que indica que modifique el archivo original.

Eso hará que el texto sea remplazado y que sea guardado en el archivo original. Al mostrarlo de nuevo, vemos que se ha remplazado correctamente.

Usando pipes

Este editor es un editor de streams; su nombre lo indica. Por lo tanto podemos usar las tuberías o pipes para pasarle contenido. Un ejemplo sencillo es el siguiente…

Para ver el tiempo que lleva encendido el sistema operativo podemos usar uptime. Eso mostrará algo como:

11:34:18 up 4 days, 14:47, 1 user, load average: 1.67, 1.57, 1.66

Ahora quiero remplazar “days” por “días” así que puedo hacerlo enviando la salida de uptime por una tubería hacia sed, y remplazarlo:

Linux y sed: pasar datos por pipes

El comando fue: uptime | sed s/days/días/ y no utilicé la opción global puesto que solo quise remplazar la primer ocurrencia.

Obviamente podría redireccionar la salida a un archivo; enviársela a sed de nuevo, etcétera. Ventajas y bellezas de Linux.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario