Como faço para trabalhar com um caractere de teclado não digitável?

Como faço para trabalhar com um caractere de teclado não digitável?

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.

informação relacionada