31+ Ejemplos para el comando sed Linux en la manipulación de textos

En el post anterior, hablamos de las funciones de bash y de cómo utilizarlas desde la línea de comandos directamente, y vimos algunas otras cosas interesantes. Hoy hablaremos de una práctica herramienta para la manipulación de cadenas llamada sed o comando sed Linux.

Usamos sed para trabajar con archivos de texto como archivos de registro, archivos de configuración y otros archivos de texto.

En este post, nos vamos a centrar en el comando sed Linux, que se utiliza para la manipulación de texto, que es un paso esencial en nuestro viaje de scripting bash.

El sistema Linux proporciona algunas herramientas para el procesamiento de texto; una de esas herramientas es sed.

Discutiremos los más de 31 ejemplos con imágenes para mostrar la salida de cada ejemplo.

Tabla de contenidos

Entender el comando sed Linux

El comando sed es un editor de texto no interactivo. El comando sed Linux edita los datos basándose en las reglas que le proporcionas; puedes usarlo así:

$ sed options file

No estás limitado a usar sed para manipular archivos; lo aplicas al STDIN directamente así:

$ echo "Welcome to LikeGeeks page" | sed 's/page/website/'

comando Linux sed

El comando s reemplaza el primer texto por el segundo patrón de texto. En este caso, sustituimos la cadena «website» por la palabra «page».

El ejemplo anterior era un simple ejemplo para demostrar la herramienta. Podemos utilizar el comando sed de Linux para manipular archivos también.

Creemos un archivo de ejemplo :

sed manipulate file

$ sed 's/test/another test/' ./myfile

Los resultados se imprimen en la pantalla instantáneamente; no hay que esperar a procesar el archivo hasta el final.

Si su archivo es lo suficientemente masivo, verá el resultado antes de que el procesamiento termine.

El comando Linux de Sed no actualiza sus datos. Sólo envía el texto modificado a STDOUT. El archivo sigue intacto. Si necesitas sobrescribir el contenido existente, puedes consultar nuestro post anterior, que hablaba de las redirecciones.

Usando múltiples comandos sed de Linux en la línea de comandos

Para ejecutar múltiples comandos sed, puedes usar la opción -e así:

$ sed -e 's/This/That/; s/test/another test/' ./myfile

sed múltiples comandos

Debes separar los comandos sed por un punto y coma sin espacios.

También puedes usar una comilla simple para separar los comandos así:

$ sed -e '> s/This/That/> s/test/another test/' myfile

sed comandos separados

El mismo resultado, nada del otro mundo.

Lectura de comandos desde un archivo

Puedes guardar tus comandos sed en un archivo y utilizarlos especificando el archivo mediante la opción -f.

$ cat mycommandss/This/That/s/test/another test/
$ sed -f mycommands myfile

lectura de comandos desde archivo

Sustitución de banderas

Mira el siguiente ejemplo con atención:

$ cat myfile
$ sed 's/test/another test/' myfile

sed sustituir bandera

El resultado anterior muestra que sustituimos la primera ocurrencia en cada línea. Para sustituir todas las ocurrencias de un patrón, utilice una de las siguientes banderas de sustitución.

Podemos escribir las banderas así:

s/pattern/replacement/flags

Hay cuatro tipos de sustituciones:

  • g, reemplazar todas las ocurrencias.
  • Un número, el número de ocurrencia para el nuevo texto que desea sustituir.
  • p, imprimir el contenido original.
  • w archivo: significa escribir los resultados en un archivo.

Puedes limitar el reemplazo especificando el número de ocurrencia que debe ser reemplazado así:

$ sed 's/test/another test/2' myfile

sed number flag

Como puedes ver, reemplazamos sólo la segunda ocurrencia en cada línea.

La bandera g significa global, lo que significa un reemplazo global para todas las ocurrencias:

$ sed 's/test/another test/g' myfile

bandera global de sed

La bandera p imprime cada línea contiene una coincidencia de patrón, puedes usar la opción -n para imprimir sólo las líneas modificadas.

$ cat myfile
$ sed -n 's/test/another test/p' myfile

sed supress lines

La bandera w guarda la salida en un archivo especificado:

$ sed 's/test/another test/w output' myfile

enviar la salida a un archivo

Imprimimos la salida en la pantalla, pero guardamos las líneas coincidentes en el archivo de salida.

Reemplazar caracteres

Supongamos que quieres buscar el shell bash y reemplazarlo por el shell csh en el archivo /etc/passwd usando sed, bueno, puedes hacerlo fácilmente:

$ sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd

¡Oh!!! eso se ve terrible.

Por suerte, hay otra manera de lograr eso. Puedes usar el signo de exclamación (!) como delimitador de cadenas así:

$ sed 's!/bin/bash!/bin/csh!' /etc/passwd

Ahora es más fácil de leer.

Limitando sed

El comando sed procesa todo tu archivo. Sin embargo, puedes limitar el comando sed para que procese líneas específicas; hay dos formas:

  • Un rango de líneas.
  • Un patrón que coincida con una línea específica.

Puedes escribir un número para limitarlo a una línea específica:

$ sed '2s/test/another test/' myfile

sed restringido

Sólo modificamos la línea dos.

¿Qué tal si usamos un rango de líneas:

$ sed '2,3s/test/another test/' myfile

reemplazar rango de líneas

También podemos empezar desde una línea hasta el final del archivo:

$ sed '2,$s/test/another test/' myfile

reemplazar hasta el final

O puedes usar un patrón como este:

$ sed '/likegeeks/s/bash/csh/' /etc/passwd

sed pattern match

¡Asombroso!

Puedes usar expresiones regulares para escribir este patrón y que sea más genérico y útil.

Borrar líneas

Para borrar líneas usando sed, puedes usar la bandera delete (d) es tu amiga.

La bandera delete borra el texto del stream, no el archivo original.

$ sed '2d' myfile

sed delete line

Aquí borramos la segunda línea sólo de miarchivo.

¿Qué hay de borrar un rango de líneas?

$ sed '2,3d' myfile

borrar varias líneas

Aquí borramos un rango de líneas, la segunda y la tercera.

Otro tipo de rangos:

$ sed '3,$d' myfile

borrar hasta el final

Aquí borramos desde la tercera línea hasta el final del fichero.

Todos estos ejemplos nunca modifican su archivo original.

$ sed '/test 1/d' myfile

borrar coincidencia de patrón

Aquí utilizamos un patrón para borrar la línea si coincide en la primera línea.

Si necesitas borrar un rango de líneas, puedes usar dos patrones de texto como este:

$ sed '/second/,/fourth/d' myfile

borrar rango de líneas

Borramos desde la segunda hasta la cuarta línea.

Insertar y anexar texto

Puede insertar o anexar líneas de texto utilizando las siguientes banderas:

  • La bandera (i).
  • La bandera (a).
$ echo "Another test" | sed 'i\First test '

sed inserta texto

Agregamos el texto antes de la línea especificada.

$ echo "Another test" | sed 'a\First test '

sed append

Añadimos el texto después de la línea especificada.

¿Y qué hay de añadir texto en el medio?

Fácil, mira el siguiente ejemplo:

$ sed '2i\This is the inserted line.' myfile

sed insert line

Y el appending funciona igual, pero fíjate en la posición del texto anexado:

$ sed '2a\This is the appended line.' myfile

sed append line

Utilizamos las mismas banderas pero con una ubicación de inserción o apéndice.

Modificación de líneas

Para modificar una línea específica, puedes usar la bandera (c) así:

$ sed '3c\This is a modified line.' myfile

sed modify line

Puedes usar un patrón de expresión regular, y todas las líneas que coincidan con ese patrón serán modificadas.

$ sed '/This is/c Line updated.' myfile

sed pattern match

Transforma los caracteres

La bandera de transformación (y) funciona en caracteres como este:

$ sed 'y/123/567/' myfile

caracteres de transformación de sed

Aplicamos la transformación a todos los datos, y no podemos limitarla a una ocurrencia específica.

Imprimir números de línea

Puedes imprimir el número de línea usando el signo (=) así:

$ sed '=' myfile

sed números de línea

Sin embargo, usando -n combinado con el signo igual, el comando sed muestra el número de línea que contiene coincidencias.

$ sed -n '/test/=' myfile

ocultar líneas

Leer datos de un archivo

Puede utilizar la bandera (r) para leer datos de un archivo.

Puede definir un número de línea o un patrón de texto para el texto que desea leer.

$ cat newfile
$ sed '3r newfile' myfile

leer datos del archivo

Insertamos el contenido después de la tercera línea como se esperaba.

Y esto es usando un patrón de texto:

$ sed '/test/r newfile' myfile

leer patrón de coincidencia

¿Qué bien, verdad?

Ejemplos útiles

Supongamos que tenemos un archivo que contiene texto con un marcador de posición, y tenemos otro archivo que contiene los datos que llenarán el marcador de posición en el otro archivo.

Utilizaremos las banderas (r) y (d) para hacer el trabajo.

La palabra DATA en ese archivo es un marcador de posición para un contenido real que almacenaremos en otro archivo llamado data.

La sustituiremos por el contenido real:

$ Sed '/DATA>/ {r newfiled}' myfile

repalce placeholder

¡Impresionante!!! como puedes ver, hemos llenado la ubicación del placeholder con los datos del otro archivo.

Esto es sólo una pequeña introducción sobre el comando sed. El comando sed Linux es otro mundo por sí mismo.

La única limitación es tu imaginación.

Espero que te resulte fácil manipular cadenas usando el comando sed Linux.

Gracias.

Fundador de LikeGeeks. Trabajo como administrador de sistemas Linux desde 2010. Soy responsable del mantenimiento, la seguridad y la resolución de problemas de servidores Linux para múltiples clientes en todo el mundo. Me encanta escribir scripts de shell y Python para automatizar mi trabajo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *