Às vezes, preciso pesquisar arquivos com caracteres acentuados (diacríticos em geral), geralmente com localize / mlocate. Desejo configurar (talvez em /etc/updatedb.conf
), para que eu procure esses caracteres especiais usando um determinado mapeamento de idioma, por exemplo:
a == âàáäÂÀÂÄ
e == êèéëÊÈÉË
i == îïíÎÏ
o == ôöóÔÖ
u == ûùüÛÜÙ
c == çÇ
n == ñ
Portanto, locate -i liberación
procure também arquivos com string liberacion e até liberaciòn .
Notas e premissas
- E talvez outros: ÊÊÊÊÌÍÎÏ ÏÑÒÓÔÕØØÙÚÛÜÝÞ ßàáâãäåæç èéêëìíîïðñòóôõö øùúûüýþÿ .
- Essa é uma situação comum em idiomas românticos como espanhol, francês e alemão.
- Estou sempre usando um código de idioma 100% UTF-8.
- Eu preferiria não ter que usar expressões regulares.
- Um patch pode usar transliterações ASCII de Unicode, como o Unidecode / cUnidecode . A maior parte do mlocate está escrita em C.
Relacionado
- Pergunta semelhante, mas usando
find
- Miloslav Trmač (
mlocate
desenvolvedor) diz aqui que o código fonte oficial está no pagure.io (e um fork no Github ). - Eu arquivei um problema no mlocate repo no Pagure.io para adicionar esse recurso.
- Atualização 2018-02 : Isso pode ser corrigido com esta solicitação de recebimento por marcotrevisan . Irá adicionar um
-t
/--transliterate
suporte usandoiconv
para corresponder acentuado. - Atualização 2018-03 :
mlocate
com suporte para--transliterate
agora está incluído no Ubuntu 18.04 LTS Bionic Beaver ( v2 e v3.1 ).
- Atualização 2018-02 : Isso pode ser corrigido com esta solicitação de recebimento por marcotrevisan . Irá adicionar um
grep -f
oufgrep
evitar a interpretação de"$CH"
um caractere especial, por exemplogrep ^
, corresponderia a qualquer linha, masgrep -f ^
corresponderá apenas àquelas que contêm o caractere^
. Também pode ser mais fácil usar classes de caracteres para criar a expressão regular, ou seja,REG="[$CHARS]"
é provavelmente mais fácil que o seused
comando. Cuidado com caracteres especiais! Caso contrário, uma boa abordagem. +1