Saltar al contenido

Buscar con caracteres diacríticos / acentos con el comando `localizar`

Este equipo de trabajo ha pasado horas investigando para dar espuestas a tu interrogante, te regalamos la solución así que esperamos que te sea de mucha apoyo.

Solución:

Si echamos un vistazo a updatedb.conf(5)encontraremos que no hay mucho que podamos hacer con los elementos de configuración.

Así que vamos a escribir un script usando locate; Al final somos capaces de ejecutar algo como my-locate.sh liberacion o my-locate.sh liberâciòn y nos traerá todas las combinaciones posibles.


Empecemos

Primero cree un archivo simple como nuestra base de datos donde quiera que esté, por ejemplo: ~/.mydb; luego agregue sus caracteres de acentos en ese archivo de esta manera:

aâàáäÂÀÂÄ
eêèéëÊÈÉË
iîïíÎÏ
uûùüÛÜÙ
cçÇ
oôöóÔÖóòòò
...
...

Entonces necesitamos un pequeño script que haga el trabajo por nosotros, escribí uno simple:

#!/bin/bash

# Final search term 
STR=""

# Loop throughout all characters of desired string
for (( i=0; i<$#1; i++ )); do

  # Split the string in one char
  CH="$1:$i:1"

  # Find all possible combinations of this char
  CHARS=$(grep "$CH" ~/.mydb)

  # Add an "or" operator between characters
  REG=$(echo "$CHARS" |  sed 's/.1/&|/g' )
  REG="($REG)"

  # Append all possible combination of this character
  # to our final search term as an or statement
  if [ "$REG" == '()' ];
  then
   STR=$STR$CH
  else
   STR=$STR$REG
  fi

done

# locate it using regex
locate --regex "$STR$"

Ahora guárdelo en algún lugar de su RUTA con el nombre deseado, por ejemplo: en ~/bin. Ya debería estar en su entorno PATH.

Después de todo, simplemente use algo como esto para buscar todas las combinaciones posibles.

my-locate.sh liberacion

Encontrará para mí todos estos:

~/lab/liberacion
~/lab/liberaciòn
~/lab/liberación
~/lab/liberâciòn
~/lab/liberäciòn
~/lab/libÈrâciòn

Ahora con mlocate 0.26 tenemos -t --transliterate opción (consulte la página de manual) en Ubuntu 18.04+ (sin necesidad de soluciones alternativas):

Creando algunos archivos de prueba:

$ touch liberación liberacion liberaciôn

Actualizar y buscar:

$ updatedb
$ locate --transliterate liberacion 
/home/pablo/liberacion
/home/pablo/liberación
/home/pablo/liberaciôn

Asi que ahora locate -t liberación también busque archivos con string liberacion e incluso liberaciòn!

Finalmente, creando un alias en mi .bashrc 🙂

$ alias locate="locate --transliterate"

Puntuaciones y reseñas

Al final de todo puedes encontrar las observaciones de otros sys admins, tú igualmente tienes el poder dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *