Feb 122015
 

vi (y su versión mejorada vim)  es el editor de texto más extendido en los sistemas Unix. La potencia de este editor se debe en gran medida a la posibilidad de utilizar expresiones regulares para seleccionar y editar con un sólo comando todas las líneas que contienen un determinado patrón de texto.

En ocasiones, puede ser necesario seleccionar y editar todas las líneas que NO contienen un determinado patrón de texto. En este artículo se explica cómo realizar este tipo de acción en vi.

Caso 1

Supongamos que estamos editando un fichero de texto. Algunas de las líneas contienen la palabra «vivienda», y queremos eliminar dichas líneas. En vi, el comando para realizar este cambio sería:

Pero si lo que queremos es eliminar las líneas que NO contienen la palabra «vivienda», podemos utilizar el comando:

En lugar del comando «d», podemos utilizar cualquier otro comando de edición. Por ejemplo, si queremos insertar el literal «NO COINCIDE » al comienzo de cada línea que no contiene la palabra vivienda:

Caso 2

Un caso más complicado es aquel en el que queremos seleccionar las líneas que contienen un texto u otro. Por ejemplo, si queremos eliminar las líneas en las que aparece la palabra «casa» o «vivienda»:

sustituyendo «g» por «v», seleccionaremos todas las líneas que no contienen ni «casa» ni «vivienda»:

Caso 3

Para seleccionar todas las líneas que contienen ambas palabras «casa» y «vivienda», en cualquier orden, utilizamos el operador «\&», como en el siguiente ejemplo:

sustituyendo «g» por «v», seleccionaremos todas la líneas que no contienen ambas palabras.

Caso 4

Por último, podemos querer seleccionar todas las líneas que contienen las palabras «casa» y «vivienda», y no contienen las palabras «grande» ni «pequeña». Para construir esta expresión, utilizamos el operador negación «\@!»:

En las expresiones regulares que hemos presentado en este artículo, los caracteres especiales «(«, «)», «&», «|» y «@» deben ir precedidos del carácter «\». Para evitarlo, podemos utilizar el modificador \v, y hacer así más legible la expresión regular. Utilizando «\v», la última expresión se podría escribir como:

 Publicado por en 5:38 pm

 Deja un comentario

(requerido)

(requerido)