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?
- …
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 gustaMe gusta
¿Es una petición para su inclusión o sabes hacerlo y es una recomendación amigo Nidea?🤔
Sí que son interesantes, sí…
Me gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
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
Me gustaLe gusta a 1 persona