Иногда мне нужно искать файлы с акцентированными символами (диакритические знаки в целом), обычно с помощью 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
/--transliterate
support используя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Теперь с mlocate 0.26 у нас есть
-t --transliterate
опция (см. Справочную страницу ) в Ubuntu 18.04+ (без необходимости использования нечетных обходных путей):Создание некоторых тестовых файлов:
Обновление и поиск:
Так что теперь
locate -t liberación
также искать файлы со строкойliberacion
и дажеliberaciòn
!Наконец, создание псевдонима на моем .bashrc :-)
источник