Іноді мені потрібно шукати файли з наголошеними символами (діакритичні взагалі), як правило, з 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 . Більшість молокатів написані на С.
Пов'язані
- Подібне запитання, але використання
find
- Мілослав Трмач (
mlocate
розробник) тут каже, що офіційний вихідний код знаходиться на pagure.io (і вилку на Github ). - Я подаю проблему на mlocate repo в Pagure.io, щоб додати цю функцію.
- Оновлення 2018-02 : це може бути виправлено за допомогою цього запиту на marcotrevisan . Додасть
-t
/--transliterate
підтримку,iconv
щоб відповідати акцентованим. - Оновлення 2018-03 :
mlocate
підтримка--transliterate
тепер включена в Ubuntu 18.04 LTS Bionic Beaver ( v2 та v3.1 ).
- Оновлення 2018-02 : це може бути виправлено за допомогою цього запиту на marcotrevisan . Додасть
grep -f
абоfgrep
уникати інтерпретації"$CH"
як спеціального символу, наприкладgrep ^
, відповідатиме будь-якому рядку, але відповідаєgrep -f ^
лише тим, що містять цей символ^
. Також може бути простіше використовувати класи символів для створення регулярного виразу, тобтоREG="[$CHARS]"
, ймовірно, простіше, ніж вашаsed
команда. Хоча слідкуйте за особливими персонажами! Інакше хороший підхід. +1