[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Problema com gre e acentos
From: |
Tiago Peczenyj |
Subject: |
Re: [shell-script] Problema com gre e acentos |
Date: |
Mon, 3 Jun 2013 08:41:41 -0300 |
Ola
O grande problema de vc trabalhar com letras acentuadas é que nem sempre
elas são um caracter.
Por exemplo á pode ser representado, em unicode, de duas formas diferentes:
uma é o "a minusculo com acento agudo" e o outro é o "a minusculo SEGUIDO
de acento agudo". Isso pq vc pode combinar alguns acentos e a conversa vai
longe. Ai vc pergunta: o á que eu estou usando é qual? depende do editor de
texto que vc esta usando.
Por isso existem as normalizações NFC, NFD, NFKC, NFKD do unicode. Isso
falando apenas de unicode (vulgo utf-8).
esta apresentação pode ser util.:
http://prezi.com/q2ewovss1aui/unicode-e-utf-8/
Voltando ao seu problema
No meu ambiente eu tenho estas variaveis:
LANG=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_TIME=en_US.UTF-8
Veja só:
$ grep -q "ã" <<< "ação" && echo achei || echo nao achei
achei
$ grep -q "á" <<< "ação" && echo achei || echo nao achei
nao achei
o grep -q é o modo "quiet" ou silencioso, otimo para usar em um if.
o <<< eh o chamado here strings. é um atalho para
grep xxx <( echo "string" )
parecido com
echo "string" | grep xxx
(porem o grep não é executado apos o pipe, isso é util em alguns casos
envolvendo variaveis de ambiente, etc)
Espero ter ajudado.
2013/6/2 nerobarrabas <address@hidden>
> **
>
>
> Pessoal,
>
> Meu arquivo.txt contem a linha abaixo:
>
> Belem do Pará
>
> Estou fazendo um script para pegar linhas que contêm a string "á" e/ou "B"
>
> Fiz assim:
> #!/bin/bash
> cat arquivo.txt |
> while read linha; do
> if [ "$(echo $linha | grep 'á|à|ã|Á|À|Ã|é|è|ä|É|í|Í|ó|Ó|ú|Ú')" ];
> then
> echo "$linha contém um 'á'"
> fi
> if [ "$(echo $linha | grep 'B')" ];
> then
> echo "$linha contém um 'B'"
> fi
> done
>
> O resultado foi isso:
>
> ./acentos.sh
> Belem do Pará contém um 'B'
>
> Notem que quando procura pela scting "B" funciona, mas quando procura
> acentos, não funciona.
> Poderiam me dizer porque?
>
> Grato
>
>
>
--
Tiago B. Peczenyj
Linux User #405772
http://about.me/peczenyj
[As partes desta mensagem que não continham texto foram removidas]