Eliminar liñas nun ficheiro con sed
Introducción
Esta mañá precisei eliminar filas dun CSV para relanzar un proceso no traballo. Algunhas das filas produciran un erro e precisaba relanzalas, para poder depurar qué acontecía. Por sorte, as liñas que funcionan quedan marcadas cun OK e as que non cun KO.
Eran tres ficheiros de máis de cinco mil liñas, polo que facelo a man non era eficiente. Lembrei que no blog de uGeek lera algo similar. No seu caso quería eliminar as liñas en branco.
O caso é que non hai que mudar moito, xa que utiliza unha expresión regular.
Eliminando liñas por contido
Así que no meu caso para eliminar as liñas que funcionaron, tan só tiña que eliminar aquelas que contiñan o OK. Para evitar algunha descripción que poida conter a cadea, buscarei ;OK;.
cat input.txt | sed '/^.*\;OK\;.*$/d' > output.txt
Como podemos ver neste caso utilizamos cat para volcar o contido do arquivo a sed cunha tubería. A orde que lle damos a sed ten que ir entre comillas e a expresión regular entre as barras ‘/’. Ao final da orde, vemos a letra d. Esta é a que indica que ten que borrar esa liña. Por último creamos un novo ficheiro co resultado.
Eliminando liñas por posición
Outra opción para eliminar liñas é facelo por posición, por exemplo:
cat input.txt | sed 3d > output.txt
cat input.txt | sed 14,25d > output.txt
Nos dous exemplos podemos ver coma nun caso, eliminamos a liña tres e no outro un rango da liña catorce á vintecinco. Neste caso non vai entre comillas xa que non é unha expresión.
Traballar sobre o mesmo ficheiro
No meu caso quería conservar os ficheios orixinais, xa que contiñan outras informacións que precisaba. Pero tamén podemos facer que o ficheiro de entrada e o de saída sexan o mesmo. Co que cando eliminemos esas liñas, serán eliminadas na orixe.
sed -i 3d file.txt
Neste caso estou a borrar a liña tres do ficheiro file.txt. O parámetro -i, indica que a saída será o propio ficheiro.
Conclusión
Como vemos é doado eliminar filas nun ficheiro de xeito rápido. Facer isto a man en ficheios grandes pode ser moi ineficiente. Pero a través desta ferramenta, que soe vir con todo-las distribucións, será cuestión de segundos.
Bibliografía
Blog de uGeek: uGeek
Artigos Relacionados:
- AWK
- Cómo crear un live USB dende a terminal
- Engadir tarefas a Systemd
- Copiar a saída do terminal ao portapapeis
- Controlar la temperatura del equipo con bash y telegram
- Instalar Fedora con BTRFS, cifrado e Snapshots activos
- AWK
- Mudar as DNS en Fedora
- Distrobox
- Instalar Fedora en VirtualBox
- Cómo crear un live USB dende a terminal
- Engadir tarefas a Systemd
- Copiar a saída do terminal ao portapapeis
- Configurar acceso SFTP a un directorio
- Inicio de sesión automático en Alpine linux
- Crear un usuario con permisos restrinxidos para backups
- error: gpg failed to sign the data
- Xestionar varias claves ssh
- Cómo instalar Traefik con docker
- Configurar sshfs para acceder al sistema de ficheros de forma segura
- Securizar sudo no noso sistema
- Cómo instalar Raspberry OS
- Instalando docker en modo rootless en Debian
- Configuración e uso de GPG en linux