¡Hola a todos!. Contamos con un comando muy poderoso en Linux llamado sed; normalmente, es muy utilizado para realizar filtros de archivos, dado que lee línea por línea de la entrada de datos que le demos y, basado en eso, ejecuta algún tipo de acción como leer, extraer, modificar, mostrar o guardar; podemos ver entonces que es muy versátil éste comando.
Sed es considerado un editor de texto orientado a flujo, dado que en lugar de ser interactivo (como lo es nano…), recibe en la entrada estándar (puede ser un archivo) el texto, lo procesa línea por línea y el resultados es enviado a la salida estándar (la terminal, normalmente…).
El objetivo de ésta entrada no es tratar todas las posibilidades que tiene sed, pero sí veremos cómo eliminar líneas específicas de un archivo de texto.
Eliminar una línea específica de un archivo de texto
Para eliminar una línea específica, debemos de saber (obviamente) el número de línea y así podemos ejecutar la siguiente línea de comando:
sed -i "4d" archivo.txt
Donde:
- -i → Se mencionó arriba que, el resultado por defecto de éste comando se muestra en la salida estándar (terminal), pero con éste parámetro, el resultado quedaría guardado en el mismo archivo de entrada.
- «4d» → Indicamos el # de línea que queremos eliminar; en éste caso, se eliminará la línea 4. la «d» viene de delete.
- archivo.txt → Es el archivo que recibirá de entrada el comando para manejarlo.
A continuación, un ejemplo en JSLinux:
Eliminar un rango de líneas de texto
Para eliminar un rango de líneas de texto, debemos de ingresar el siguiente comando:
sed -i "4,6d" archivo.txt
En éste caso, el rango se estable de acuerdo a ése formato presentado: número de la primera línea a eliminar, símbolo de coma («,»), número de línea final a eliminar, y «d». Eliminaría entonces, desde la línea 4 a la línea 6. Veamos un ejemplo:
Eliminar desde una línea específica hasta el final del texto
En éste caso, no conocemos cuál es el # de la línea final del archivo, pero podemos hacer uso de un comodín para poder representar la última línea del archivo:
sed -i "2,$d" archivo.txt
$d hace referencia a la última línea del archivo. Veamos el ejemplo:
En JSLinux, se debe de poner antes de $ el caracter de escape «\», pero en otros sistemas basados en GNU/Linux, debería de funcionar sin éste caracter.
Bueno, eso sería todo. Muy útil para situaciones muy especiales. ¡Saludos!