Comando sed en Bash

Nilesh Katuwal 24 marzo 2022
  1. Sintaxis de Bash sed
  2. Ejemplos de Bash sed
Comando sed en Bash

El comando sed es un editor de texto de transmisión que opera con el concepto de reemplazo.

Se utiliza para descubrir, insertar, reemplazar y eliminar fragmentos de archivos. Puede usar este programa para modificar archivos sin tener que abrirlos.

Este tutorial cubrirá los fundamentos del programa Linux sed, su sintaxis y la sintaxis de expresión regular utilizada directamente para buscar y reemplazar archivos.

Sintaxis de Bash sed

sed a menudo se usa para procesar un flujo de texto desde una entrada estándar o un archivo. Esto significa que puede pasar la salida de otro comando directamente a la entrada de la utilidad para su edición, o puede interactuar con un archivo que ya se ha creado.

De forma predeterminada, todos los resultados se envían a la salida estándar, lo que significa que se mostrarán en la pantalla en lugar de guardarse en un archivo hasta que se redirijan.

La siguiente es la sintaxis del comando:

$ sed [options] commands [file-to-edit]

file-to-edit denota la ubicación del archivo, y options denota reglas mientras se manipula el archivo dado. Y estas son algunas de sus principales opciones:

  • -n, -quiet: después de cada iteración, no muestra el contenido del búfer de plantilla.
  • -e: comandos a ejecutar para editar.
  • -f: lee comandos de edición de un archivo.
  • -i: crea una copia de seguridad del archivo antes de editarlo.
  • -l: le permite establecer la longitud de su línea.
  • -r: habilita el soporte para la sintaxis de expresión regular expandida.
  • -s: al transferir varios archivos, considérelos como flujos individuales en lugar de uno largo.

Ejemplos de Bash sed

Hemos creado un archivo llamado demosed.txt y lo hemos guardado en el directorio de inicio con el siguiente contenido:

demostrado

Comience mostrando las líneas 1 a 5 del archivo demosed.txt en el directorio de inicio.

Usaremos el comando p para hacer esto. Usamos la opción -n para imprimir lo que necesitamos en lugar de todo el contenido del búfer de plantilla en cada iteración.

$ sed -n '1,5p' demosed.txt

Producción :

This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.

Para generar el archivo completo (excluyendo las líneas 1 a 10):

$ sed '1,10d' demosed.txt

Usamos d en lugar del comando p para eliminar el texto. En este caso, no utilizamos la opción -n para mostrar todo porque la utilidad muestra todo lo que no se borra cuando usamos el comando de eliminación, sino que usamos el comando d para borrar lo no deseado.

Producción :

This is the eleventh line.
This is the twelveth line.
This is the thirteenth line.
This is the fifteenth line.

Como era de esperar, solo se imprimen las líneas de 11 a 15.

Cuando abramos demosed.txt, veremos el mismo comando que cuando se ejecutó el comando anterior.

Por motivos de seguridad, sed no modifica el archivo fuente de forma predeterminada. La opción -i, que significa editar en el lugar, se puede utilizar para manipular el archivo original.

Para eliminar la línea 14 del archivo:

$ sed -i '13~15d' demosed.txt

El comando anterior no da ningún resultado. Veamos el contenido dentro del archivo.

demostrado1

En comparación con la versión anterior del archivo, vemos que la línea 14 con el texto This is thirteenth line..

Regex también se puede usar en sed con options. Veamos un ejemplo.

$ sed '/^nine\|^$\| *nine/d' demosed.txt

Producción :

This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.
This is the sixth line.
This is the seventh line.
This is the eighth line.
This is the tenth line.
This is the eleventh line.
This is the twelveth line.
This is the fifteenth line.

'/^nine\|^$\| *nine/' es la operación de expresión regular que detecta la oración con la palabra nine. El comando anterior no alterará el archivo original porque no hemos usado -i, pero podemos ver que la línea con nine está filtrada.

Artículo relacionado - Bash Command