Czasami muszę wyszukiwać pliki ze znakami akcentowanymi (ogólnie diakrytycznymi), zwykle za pomocą locate / mlocate. Chcę skonfigurować (być może /etc/updatedb.conf
), aby pozwoliła mi wyszukiwać znaki specjalne przy użyciu określonego odwzorowania języka, na przykład:
a == âàáäÂÀÂÄ
e == êèéëÊÈÉË
i == îïíÎÏ
o == ôöóÔÖ
u == ûùüÛÜÙ
c == çÇ
n == ñ
Tak locate -i liberación
też wyszukać pliki z ciągiem Liberación a nawet Liberación .
Uwagi i założenia
- A może inni: ÂÃĘÀÁÅÆ ÇÈÉÊËÌÍÎÏ ÐÑÒÓÔÕÖØ'ÚÛÜÝÞ ßàáâãäåæç èéêëìíîïðñòóôõö øùúûüýþÿ .
- Jest to powszechna sytuacja w przypadku języków romańskich, takich jak hiszpański, francuski i niemiecki.
- Zawsze używam ustawień regionalnych 100% UTF-8.
- Wolałbym nie używać wyrażeń regularnych.
- Łatka może wykorzystywać transliteracje ASCII Unicode, jak robi to Unidecode / cUnidecode . Większość mlocate jest napisana na C.
Związane z
- Podobne pytanie, ale przy użyciu
find
- Miloslav Trmač (
mlocate
programista) powiedział tutaj, że oficjalny kod źródłowy znajduje się na pagure.io (i rozwidlenie na Github ). - Zgłosić problem na mlocate repo na Pagure.io dodać tę funkcję.
- Aktualizacja 2018-02 : Można to naprawić za pomocą tej prośby od marcotrevisan . Dodaje
-t
/--transliterate
wsparcie za pomocą,iconv
aby dopasować akcentowane. - Aktualizacja 2018-03 :
mlocate
z obsługą dla--transliterate
jest teraz uwzględniona w Ubuntu 18.04 LTS Bionic Beaver ( v2 i v3.1 ).
- Aktualizacja 2018-02 : Można to naprawić za pomocą tej prośby od marcotrevisan . Dodaje
źródło
grep -f
lub,fgrep
aby uniknąć interpretacji"$CH"
znaku specjalnego, np.grep ^
Pasuje do dowolnej linii, alegrep -f ^
pasuje tylko do tych, które zawierają znak^
. Może być również łatwiej używać klas postaci do tworzenia wyrażeń regularnych, tzn.REG="[$CHARS]"
Prawdopodobnie jest łatwiejsze niż twojesed
polecenie. Uważaj jednak na znaki specjalne! W przeciwnym razie dobre podejście. +1Teraz z mlocate 0.26 mamy
-t --transliterate
opcję (patrz strona podręcznika) na Ubuntu 18.04+ (bez konieczności dziwnych obejść):Tworzenie niektórych plików testowych:
Zaktualizuj i wyszukaj:
Więc teraz
locate -t liberación
również wyszukiwać pliki z ciągiemliberacion
, a nawetliberaciòn
!Wreszcie, tworzenie aliasu na moim .bashrc :-)
źródło