Recherche avec caractères diacritiques / accents avec la commande `local`

Parfois, j’ai besoin de rechercher des fichiers avec des caractères accentués (diacritiques en général), généralement avec local / mlocate. Je souhaite installer (peut-être dans /etc/updatedb.conf ) afin de me permettre de rechercher ces caractères spéciaux en utilisant un certain mappage de langue, par exemple:

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

Donc, locate -i liberación également rechercher des fichiers avec chaîne liberacion et même liberaciòn .

Notes et hypothèses

  • Et peut-être d’autres:
  • Cela pourrait être une situation assez commune en particulier pour les hispanophones, francophones et germanophones.
  • J’utilise toujours une locale 100% UTF-8.
  • Je préférerais ne pas avoir à utiliser d’expressions régulières.
  • Un correctif peut utiliser les translittérations ASCII de Unicode comme le font les Unidecode / cUnidecode . La plupart de mlocate est écrit sur C.

en relation

  • Question similaire mais en utilisant find
  • Miloslav Trmač (développeur mlocate ) dit ici que le code source officiel est sur pagure.io (et une fork sur Github ).
  • Je dépose un problème sur mlocate repo à Pagure.io pour append cette fonctionnalité.
    • Mise à jour 2018-02 : Ceci peut être corrigé avec cette demande d’ extraction de marcotrevisan . --transliterate support -t / --transliterate utilisant iconv pour correspondre à accentué.
    • Mise à jour 2018-03 : mlocate avec le support de --transliterate est maintenant inclus dans Ubuntu 18.04 LTS Bionic Beaver ( v2 et v3.1 ).

Si nous jetons un coup d’oeil à updatedb.conf(5) , nous constaterons qu’il n’y a pas grand chose à faire avec les éléments de configuration.

Nous allons donc écrire un script en utilisant une recherche; À la fin, nous pouvons exécuter quelque chose comme my-locate.sh liberacion ou my-locate.sh liberâciòn et cela nous apportera toutes les combinaisons possibles.


Commençons

Commencez par créer un fichier simple comme firebase database où vous le souhaitez, par exemple: ~/.mydb ; puis ajoutez vos caractères d’accents dans ce fichier comme ceci:

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

Ensuite, nous avons besoin d’un petit script qui fait le travail pour nous, j’en ai écrit un simple:

 #!/bin/bash # Final search term STR="" # Loop throughout all characters of desired ssortingng 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$" 

Maintenant, enregistrez-le quelque part dans votre PATH avec le nom souhaité, par exemple: dans ~/bin . Il devrait être déjà dans votre environnement PATH.

Après tout, utilisez simplement quelque chose comme ceci pour rechercher toutes les combinaisons possibles.

 my-locate.sh liberacion 

Trouvera pour moi tout ceci:

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