De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Uma dica sobre classe de equivalência

Colaboração: Julio Cezar Neves

Data de Publicação: 12 de janeiro de 2024

Uma dica rápida, porém bem útil para todos aqueles que usam pt_BR.UTF-8 e por conseguinte trabalham com arquivos com letras acentuadas: para ilustrar, digamos que eu queira tirar os acentos de todas as letras a de um texto e tento fazer:

$ sed 's/a/x/g' <<< aáàãâ
xáàãâ

Não funcionou, ele só trocou o primeiro a, porque ele estava sem acento e é para isso que existe a equivalência de classe. Veja então como seria:

$ sed 's/[[=a=]]/x/g' <<< aáàãâ
xxxxx

Onde a notação [[=C=]] casa com todos os caracteres equivalentes ao caractere definido por C. Como, em casos de substituição, só é possível fazê-lo de um para um, só é possível fazer a equivalência de um único caractere por vez, para tirar todos os acentos de ARQUIVO, eu deveria fazer:

sed 's/[[=a=]]/a/g
     s/[[=e=]]/e/g
     s/[[=i=]]/i/g
     s/[[=o=]]/o/g
     s/[[=u=]]/u/g
     s/[[=c=]]/c/g' ARQUIVO

Porém nos casos de pesquisa, como com o grep, poderemos especificar mais de um, veja como:

$ grep -o '[[=a=][=c=]]' <<< Ação
A
ç
ã

O problema para casos como este, é que as maiúsculas também são alteradas para minúsculas, tendo ou não acento.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Julio Cezar Neves