Curso de Vim: Eliminar las líneas que contengan un texto en #Vim

Un pequeño tutorial del editor Vim para eliminar en un texto las líneas que contengan una cadena de texto determinado

Este es un rápido tutorial en el que veremos un caso práctico (que me ha pasado a mí mismo) para borrar todas las líneas de un texto que contengan una cadena de texto específica.

Este artículo es una nueva entrega del curso “improVIMsado” que desde hace meses vengo publicando en mi blog sobre el editor Vim y que puedes seguir en estos enlaces:

Y para aprender Vim (de la manera más inteligente) aquí tienes esta útil guía:

La cuestión es que tenía un archivo de unas 300 líneas con un texto en inglés y otro traducido en español. Las líneas en inglés comenzaban con (EN) y las líneas de texto en español comenzaban con (ES). Algo similar a esto:

(EN) Lorem ipsum dolor sit amet
(ES) consectetur adipiscing elit
(EN) sed do eiusmod tempor incididunt
(ES) ut labore et dolore magna aliqua
...

Lo que necesitaba era eliminar del texto todas las líneas que comenzaran con (EN). Asi que para esto eche mano del comando global del editor Vim.

Pincha sobre el enlace para saber más sobre el comando, pero en resumen te puedo decir que tiene el siguiente formato:

:g/patrón/comando

El comando global de Vim busca todas las líneas que contengan el patrón y realiza el comando que le pasamos.

En este caso, quiero que busque todas las líneas que comiencen con el texto (EN) y elimine la línea en cuestión. Para ello ejecutaré el siguiente comando:

:g/^(EN)/d

Diseccionemos el comando:

  • :g/ → es el comando global
  • ^(EN) → busca las líneas que comiencen (para eso es el símbolo ^) con (EN)
  • /d → es el comando que se ejecutará, que en este caso es eliminar la línea

El comando puede ser cualquiera que necesitemos, sustituir una palabra, convertir en mayúscula, etc…

Otra opción de comando, sería borrar todas las líneas que NO contengan la cadena buscada, para eso se utiliza el símbolo ! Y comando sería este:

:g!/^(ES)/d

Con o que borraría todas las líneas que NO comienzan con (ES), por lo que en mi caso eliminaría todas las que comienzan con (EN) que es lo que quiero. Sería similar a ejecutar esto:

:v/^(ES)/d

Y hasta aquí este pequeño tutorial que ha nacido de una necesidad propia y que quería compartir en el blog. ¿Te interesan estas pequeñas “perlas” breves sobre Vim?

3 comentarios sobre “Curso de Vim: Eliminar las líneas que contengan un texto en #Vim

  1. Probé utilizando el comando sed —otra perla— con el mismo resultado. El comando que planteas en más intuitivo, y no es necesario invocarlo utilizando la anotación (:%!).

    :%!sed ‘/^(EN)/d’

    Saludos y gracias por el aporte. Algo más que se aprende.

Responder a Percaff_TI99 Cancelar 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 )

Google photo

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

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. 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 .