Поиск с диакритическими знаками / акцентирует символы, 'определяют местоположение' команды

Иногда я должен искать файлы с символами с диакритикой (диакритический знак в целом), обычно с locate/mlocate. Я хочу установить (возможно, в /etc/updatedb.conf) таким образом, это позволило мне искать этот специальные символы с помощью определенного отображения языка, например:

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

Так locate -i liberación также поиск файлов со строкой liberacion и даже liberaciòn.

Примечания и предположения

  • И возможно другие: ÂÃÄÀÁÅÆ ÇÈÉÊËÌÍÎÏ Ð ÑÒÓÔÕÖØÙÚÛÜÝÞ ßàáâãäåæç èéêëìíîï ð ñòóôõö øùúûüýþÿ.
  • Это - общая ситуация на романских языках как испанский, французский и немецкий язык.
  • Я всегда использую локаль 100%-й UTF-8.
  • Я не должен использовать регулярные выражения.
  • Патч мог бы использовать транслитерации ASCII Unicode, как Unidecode/cUnidecode делает. Большинство mlocate записано на C.

Похожие страницы

8
задан 27 December 2018 в 13:06

2 ответа

Теперь с mlocate 0.26 мы имеем -t --transliterate опция (см. страницу справочника) на Ubuntu 18.04 + (без потребности нечетных обходных решений):

Создание некоторых тестовых файлов:

$ touch liberación liberacion liberaciôn

Обновление и поиск:

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

Так теперь locate -t liberación также поиск файлов со строкой liberacion и даже liberaciòn!

Наконец, создавая псевдоним на моем .bashrc :-)

$ alias locate="locate --transliterate"
2
ответ дан 23 November 2019 в 05:50

Если мы будем смотреть на updatedb.conf(5), то мы найдем, что существует не очень, мы можем сделать с элементами конфигурации.

, Таким образом, мы собираемся записать сценарий с помощью locate; В конце мы можем выполнить что-то как my-locate.sh liberacion или my-locate.sh liberâciòn, и он будет приносить нам все возможные комбинации.

<час>

Позволяет, запускаются

Первый, создают простой файл как нашу базу данных где угодно, Вы хотите, чтобы она была, например: ~/.mydb; затем добавьте свои символы диакритических знаков в тот файл как это:

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

Затем нам нужен маленький сценарий, который делает задание для нас, я записал простой:

#!/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$"

Теперь сохраняют его где-нибудь в Вашем ПУТИ с желаемым именем, например: в ~/bin. Это уже должно быть в Вашей среде ПУТИ.

, в конце концов, просто использование что-то вроде этого для поиска всех возможных комбинаций.

my-locate.sh liberacion

найдет для меня все их:

~/lab/liberacion
~/lab/liberaciòn
~/lab/liberación
~/lab/liberâciòn
~/lab/liberäciòn
~/lab/libÈrâciòn
3
ответ дан 23 November 2019 в 05:50

Другие вопросы по тегам:

Похожие вопросы: