Cómo borrar líneas de un archivo utilizando sed

Valoración del Usuario:  / 0
MaloBueno 

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



Suscribirse

    Registrate para recibir las novedades y artículos por correo electrónico.

Social

Linuxito en G+