borrar contenido fichero desde la terminal

Eliminar líneas de un fichero en #Bash


El otro día, conectándome a una de las máquinas virtuales a través de ssh, me encontré que (naturalmente) había cambiado su «huella» (o «fingerprint») y no me dejaba establecer la conexión.

Por pura pereza (cada día hay más líneas en ~/.ssh/known_hosts 😅), en lugar de abrir el fichero y buscar la línea que estaba «ofendiendo» al algoritmo de curva elíptica ECDSA opté por la forma rápida (una vez que sabes cómo) de eliminar desde la terminal una línea concreta del contenido de un fichero 😉

Así que ante el siguiente mensaje de error que me impedía conectar por SSH

opté por lanzar un

sed -i '52d' /home/jasvazquez/.ssh/known_hosts

De modo que borrase (d) la línea 52 directamente del fichero /home/jasvazquez/.ssh/known_hosts gracias al comando sed.

Otras posibilidades

Ya que estamos (y ha quedado algo corto el «tip»), vamos a aprovechar para comentar otras posibles acciones que podemos realizar sobre cualquier fichero de texto desde la terminal utilizando como ejemplo el siguiente fichero

Borrar un bloque de líneas

Si queremos borrar desde la línea 3 a la 5 del fichero de ejemplo, usaremos un

sed -i '3,5d' /tmp/fichero.lst

Borrar desde una línea al final del fichero

Para borrar desde la línea 3 hasta el final del fichero (de modo que sólo queden las líneas 1 y 2) lanzaremos un

sed -i '3,$d' /tmp/fichero.lst

Borrar desde el principio hasta determinada línea

Aquí te he pillado: esta te la deberías saber porque es exactamente igual que el ejemplo original pero utilizando como primera línea del bloque la 1. Así, si queremos borrar las 3 primeras líneas del fichero de ejemplo, lanzaremos un

sed -i '1,3d' /tmp/fichero.lst

Conclusión

Recopilación de ejemplos de uso del comando sed para borrar líneas de un fichero de texto desde la línea de comandos que espero te resulten de utilidad en caso de necesidad 👍

Y tú…

  • ¿Cómo hacer para borrar líneas de un fichero desde la terminal?
  • ¿Conoces otra forma más sencilla de eliminar líneas concretas de un fichero de texto?

8 comentarios en “Eliminar líneas de un fichero en #Bash

  1. Buenas

    A mi gusto te han faltado dos opciones, para mi las más importantes.
    Borrar líneas vacías y borrar comentarios.

    Ideal para los ficheros de configuración.

    Me gusta

      1. Para quitar los comentarios supongo que sería algo así
        sed -i ‘s/#.*//g’ /tmp/comentario.txt

        Básicamente buscar un línea que empiece por # porque se supone que es un comentario y reemplazarlo por nada.

        Se puede complicar mucho y eso de usar expresiones regulares es difícil de enseñar y de aprender claro.

        Me gusta

        1. Ah y quitar las líneas en blanco después de ejecutar lo anterior sería sed -i ‘/^ *$/d’ /tmp/comentario.txt

          Solo me falta la última línea si es en blanco pero vamos que se puede liar parda con esto

          Me gusta

        2. Si es «empezar», yo usaría mejor un ^#.* como haces en tu comentario para líneas en blanco amigo Julio ya que la solución propuesta eliminaría comentarios en cualquier línea (y nos podrían «canear» 🤣😅)

          Me gusta

      2. Ambas. Es una petición para inclusión y también se como hacerlo.

        Eliminar líneas en blanco

        sed -e ‘/^$/d’ fichero

        Eliminar comentarios

        sed -e ‘/^#/d’ fichero

        Luego guardamos la salida a un nuevo fichero con «> nuevoFichero»

        Seguro que os ayuda

        Me gusta

  2. Pero vamos a ver almadecantaro
    Si te está cantando que te falla una línea del known_hosts, ssh incorpora una herramienta para este caso, que es ssh-keygen -R «nombre_del_host»

    No se ve en tu foto de la terminal, pero te lo suele poner en el mensaje como proceder y solo habría de copiar y pegar.

    Me gusta

  3. Pero de cántaro «rodado» 🤣👍

    Gracias por el apunte Fede ese parámetro se me había escapado (pero me lo voy a «tatuar» porque lo estoy haciendo demasiadas veces de un tiempo a esta parte 👍) completamente 😅 pero mejor así… hubiese tenido que inventar otro ejemplo y últimamente no ando excesivamente «creativo» 🤣🙈

    Gracias monstruo

    Le gusta a 1 persona

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.