Los ejemplos que presento en este artículo pueden ser útiles cuando necesitamos borrar rápidamente muchas líneas de un archivo.
Sed es un editor de stream. Se utiliza para realizar transformaciones básicas de texto sobre un stream (un archivo o entrada de un pipe |
). Debido a que sed
es una herramienta muy completa y extensa, no voy a ahondar en detalles y voy a mostrar directamente los ejemplos.
A modo de ejemplo voy a utilizar el archivo "pepe" que tiene el siguiente contenido:
$ cat pepe 1-aaaaaaaaaaaaaaaaaa 2-bbbbbbbbbbbbbbbbb 3-cccccccccccccccc 4-ddddddddddddddd 5-eeeeeeeeeeeeee 6-fffffffffffff 7-gggggggggggg 8-hhhhhhhhhhh
Cómo borrar la enésima línea
Por ejemplo, para eliminar la línea 5 del archivo "pepe", ejecutar sed '5d' pepe
:
$ sed '5d' pepe 1-aaaaaaaaaaaaaaaaaa 2-bbbbbbbbbbbbbbbbb 3-cccccccccccccccc 4-ddddddddddddddd 6-fffffffffffff 7-gggggggggggg 8-hhhhhhhhhhh
Cómo borrar un rango de líneas
Por ejemplo, para borrar desde la línea 5 hasta la 6 inclusive, ejecutar sed '5,6d' pepe
:
$ sed '5,6d' pepe 1-aaaaaaaaaaaaaaaaaa 2-bbbbbbbbbbbbbbbbb 3-cccccccccccccccc 4-ddddddddddddddd 7-gggggggggggg 8-hhhhhhhhhhh
Cómo borrar las primeras n líneas
Por ejemplo, para borrar las primeras 5 líneas, ejecutar sed '1,5d' pepe
:
$ sed '1,5d' pepe 6-fffffffffffff 7-gggggggggggg 8-hhhhhhhhhhh
Cómo truncar un archivo desde la enésima línea
Por ejemplo, para borrar desde la línea 5 hasta el final del archivo, ejecutar sed '5,$d' pepe
:
$ sed '5,$d' pepe 1-aaaaaaaaaaaaaaaaaa 2-bbbbbbbbbbbbbbbbb 3-cccccccccccccccc 4-ddddddddddddddd
Para editar sobre el mismo archivo en lugar de mostrar el resultado por salida estándar se debe utilizar la opción -i
. Opcionalmente se puede agregar un sufijo para que sed guarde un backup, por ejemplo -i.bak
:
[pepe@pepebox tmp]$ ll pepe* -rw-rw-r-- 1 pepe pepe 140 Jun 4 10:43 pepe [pepe@pepebox tmp]$ sed -i.bak '5,$d' pepe [pepe@pepebox tmp]$ ll pepe* -rw-rw-r-- 1 pepe pepe 78 Jun 4 10:43 pepe -rw-rw-r-- 1 pepe pepe 140 Jun 4 10:43 pepe.bak [pepe@pepebox tmp]$ cat pepe 1-aaaaaaaaaaaaaaaaaa 2-bbbbbbbbbbbbbbbbb 3-cccccccccccccccc 4-ddddddddddddddd [pepe@pepebox tmp]$ cat pepe.bak 1-aaaaaaaaaaaaaaaaaa 2-bbbbbbbbbbbbbbbbb 3-cccccccccccccccc 4-ddddddddddddddd 5-eeeeeeeeeeeeee 6-fffffffffffff 7-gggggggggggg 8-hhhhhhhhhhh
El manual completo de sed se encuentra en formato texinfo:
$ info sed