Gedit: reemplazos con regex

Download PDF

Gedit es un poderoso editor de texto que viene por defecto en Ubuntu GNU/Linux. Una necesidad constante es reemplazar un texto por otro y Gedit ofrece esta potente opción, veamos cómo funciona.

Para reemplazar texto con Gedit se debe primero utilizar la combinación de teclas CTRL+H para acceder al siguiente cuadro de diálogo:

Antes de hablar de las expresiones regulares (regex), analicemos las opciones básicas:

  • Primero lo primero, lo que escribamos en el cuadro Find será lo que encontremos, lógicamente. Ahora bien, si queremos buscar una cadena de texto que se encuentre al principio de una línea (pero no la primera línea) podemos usar el carácter de retorno de carro representado como un carácter escapado, o sea, \r. Los otros caracteres escapados son: nueva línea, \n; tabulador \t y la mismísima barra la podremos buscar con \\. Podemos incluso buscar solamente esos caracteres escapados sin problema alguno, esto sirve como abre bocas al uso de regex.
  • Match case: si necesitamos buscar distinguiendo mayúsculas y minúsculas. Esto funciona incluso con vocales acentuadas y la letra eñe.
  • Obviamente lo que coloquemos en el cuadro Replace with será lo que vamos a cambiar, ya sea uno a uno ( botón Replace ) o todos a la vez ( botón Replace all ).
  • Una opción interesante es el botón Find (Buscar) ya que si no estamos seguros qué vamos a reemplazar pues lo buscamos uno por uno, pulsamos el botón de reemplazar si es el caso o de nuevo el botón buscar para la siguiente coincidencia. Si marcamos Search backwards el botón de búsqueda en vez de buscar hacia adelante y hacia abajo, pues irá hacia arriba y hacia atrás. Wrap around, la cual viene marcado por defecto, sabrá dios por qué, hace que al llegar al final del fichero se comience de nuevo la búsqueda desde el principio. Si tenemos que realizar hasta una docena de reemplazos, este mecanismo va de maravillas.
  • Match entire word only: esta opción permite buscar y reemplazar palabras completas, por ejemplo buscar «pero» excluyendo «espero».

Tabla de contenido:

Búsquedas y reemplazos con regex

Pues bien, aquí llegamos al meollo del asunto y antes de comenzar recomiendo visiten y estudien nuestro artículo Expresiones regulares («Regular Expression» o «Regex») antes de comenzar a realizar búsquedas con regex. Si ya tienen conocimiento, al menos básico, pues sigan adelante.

En nuestro idioma castellano el prefijo «sub» es muy utilizado, pongamos por caso que necesitamos que dicho prefijo vaya siempre junto a la palabra siguiente: para ello buscaremos con sub\s y marcaremos la opción Regular expression y hacemos clic en el botón de buscar.

El asunto se complica si debemos evitar que se sustituya «sub comandante», en ese caso podremos excluir las palabras siguientes con la letra ce: sub\s[^cC]Es en esta parte donde viene lo interesante ya que si sustituimos con «sub» tendremos resultados extraños, si teníamos «sub terráneo» ¡luego veremos que se habrá cambiado a «suberráneo»!

¿Qué sucedió aquí?

Pues que la exclusión hace que se incluya (nunca más paradójico) en la sustitución la siguiente letra (que no sea ce) y que dicha letra sea eliminada.

Para ello Gedit tiene la opción de poder encerrar (o más bien agrupar) una expresión regular entre paréntesis y luego sustituir con lo mismo que halla conseguido mediante el carácter escapado \1:

Por favor, lea también   «Un manual de línea de comandos de Linux» por Lisa Tagliaferri

Se debe tener cuidado donde se ubique a \1 (en este caso es un sufijo, si fuera un prefijo iría de primera dicha variable) ya que producirá resultados erróneos.

Otro ejemplo

Necesitamos sustituir los dos puntos que estén precedidos por un espacio (  :) a simplemente dos puntos (:) exceptuando los que estén precedidos por dos espacios (  :) o estén precedidos por una letra pe y un espacio (p :).

Esto lo podremos realizar con las siguientes expresiones regulares:

Nótese que el espacio antes de los dos puntos es lo que necesitamos eliminar, por eso no lo escribimos en el cajón de reemplazo.

Caso práctico

Para finalizar dejo una lista de palabras:

sabana
sub comisario
perro
Sub secretaria
PIÑA
sub presidente
loro
sábana
sub empleado, explotado.
gato
SÁBANA
Piña
subterfugio del sub comandante
sub contratado

Para que le apliquen los siguientes reemplazos:

 

Para que quede claro, buscar:

sub\s([^c])(.*)

Y reemplazar con:

sub\1\2 (por debajo de \1\2)

¿Qué creen ustedes que sucederá?


Language programming books, photo by Helder da Rocha
Fuentes consultadas

En idioma inglés

Crédito de la imagen Gerd Altmann, trabajo, licencia de uso:Pixabay
Crédito de la imagen Gerd Altmann, trabajo, licencia de uso:Pixabay

Download PDF

Dejar una respuesta