Иногда мне нужно искать файлы с акцентированными символами (диакритические знаки в целом), обычно с помощью locate / mlocate. Я хочу настроить (может быть, в /etc/updatedb.conf), чтобы он позволял мне искать эти специальные символы с использованием определенного языкового отображения, например:
a == âàáäÂÀÂÄ
e == êèéëÊÈÉË
i == îïíÎÏ
o == ôöóÔÖ
u == ûùüÛÜÙ
c == çÇ
n == ñ
Так locate -i liberaciónже искать файлы с струнной Liberacion и даже Liberacion .
Примечания и предположения
- И, может быть, другие: ÂÃÄÁÁÅÆ ÇÈÉÊËÌÍÎÏ ÐÑÒÓÔÕÖØÙÚÛÜÝÞ ßàáâãäåæç èéêëìíîïðñòóôôõöö øùúûüýþÿ .
- Это распространенная ситуация на романских языках, таких как испанский, французский и немецкий.
- Я всегда использую локаль 100% UTF-8.
- Я бы предпочел не использовать регулярные выражения.
- Патч может использовать транслитерации ASCII Unicode, как это делает Unidecode / cUnidecode . Большая часть mlocate написана на C.
связанные с
- Аналогичный вопрос, но с использованием
find - Милослав Трмач (
mlocateразработчик) говорит здесь, что официальный исходный код находится на pagure.io (и развилке на Github ). - Я подаю проблему на репозиторий mlocate на Pagure.io, чтобы добавить эту функцию.
- Обновление 2018-02 : это может быть исправлено с помощью этого запроса извлечения от marcotrevisan . Добавим
-t/--transliteratesupport используяiconvдля соответствия с ударением. - Обновление 2018-03 :
mlocateс поддержкой--transliterateтеперь включена в Ubuntu 18.04 LTS Bionic Бивер ( v2 и v3.1 ).
- Обновление 2018-02 : это может быть исправлено с помощью этого запроса извлечения от marcotrevisan . Добавим
grep -fили,fgrepчтобы избежать интерпретации"$CH"в качестве специального символа, напримерgrep ^, соответствует любой строке, но соответствуетgrep -f ^только тем, которые содержат символ^. Также может быть проще использовать классы символов для создания регулярного выражения, т.е.REG="[$CHARS]", вероятно, проще, чем вашаsedкоманда. Остерегайтесь специальных символов, хотя! В противном случае хороший подход. +1