Estou no processo de criar um script bash para acessar o weather.com e obter o boletim meteorológico. Preciso processar uma linha de texto que tenha um caráter incomum. Aqui está o texto:
30°FAlto 35°Alto 52°Alto 45°Alto 43°Alto
Há um pequeno círculo entre os números e as letras. Aqui está o código:
#!/bin/bash
clear
lynx --dump http://www.weather.com/weather/5-day/New+York+NY+10001 | \
egrep ' Today | Tonight ' -A 22 | awk 'BEGIN {print "\n\t\t\b\b\b\b\b\bTHE FIVE DAY\
WEATHER REPORT FOR THE NYC: 10001\n"} \
/[0-9][0-9]*[a-z|A-Z]+/{print $1"\t\t"$2" "$3"\t\t"$4" "$5"\n"}' 2>> error.txt
Isso não dá saída.
Responder1
A maneira mais fácil é usar um ponto que corresponda ao símbolo de grau.
/[0-9][0-9]*.[a-z|A-Z]+/
Por exemplo
$ echo -e "30\0260FHigh" \
| awk '/[0-9][0-9]*.[a-z|A-Z]+/ { print "yes" }'
yes
(\0260 é octal para o símbolo de grau na sua pergunta)
Se você quiser combiná-lo exatamente, terá que identificar seu valor na codificação usada. No texto da sua pergunta parece ser 0xb0.
$ echo -e "30\0260FHigh" \
| awk '/[0-9][0-9]*\xb0[a-z|A-Z]+/ {print "yes" }'
yes
\0260 e \xb0 apenas ilustram duas maneiras de indicar a mesma coisa.
Responder2
O shell moderno do Linux é muito compatível com Unicode. Na verdade, acho que todos os dados são tratados como UTF-8.
Não tive problemas ao executar este código:
$ echo ° | awk '/°/{print "found it"}'
found it
Se você estiver criando um script de shell, certifique-se de tê-lo em UTF-8 em vez de ASCII.