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:
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.
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.