¿Cómo trabajo con un carácter de teclado que no se puede escribir?

¿Cómo trabajo con un carácter de teclado que no se puede escribir?

Estoy en el proceso de crear un script bash para extraer un Weather.com y obtener el informe meteorológico. Necesito procesar una línea de texto que tiene un carácter inusual. Aquí está el texto:

30°FAlto 35°Alto 52°Alto 45°Alto 43°Alto

Hay un pequeño círculo entre los números y las letras. Aquí está el 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

Esto no da ningún resultado.

Respuesta1

La forma más sencilla es utilizar un punto para que coincida con el símbolo de grado.

/[0-9][0-9]*.[a-z|A-Z]+/

Por ejemplo

$ echo -e "30\0260FHigh" \
| awk '/[0-9][0-9]*.[a-z|A-Z]+/ { print "yes" }'

yes

(\0260 es octal para el símbolo de grado en su pregunta)

Si desea que coincida exactamente, deberá identificar su valor en la codificación utilizada. En el texto de tu pregunta parece ser 0xb0.

 $ echo -e "30\0260FHigh" \
 | awk '/[0-9][0-9]*\xb0[a-z|A-Z]+/ {print "yes" }'

 yes

\0260 y \xb0 simplemente ilustran dos formas de indicar lo mismo.

Respuesta2

El shell de Linux moderno es muy compatible con Unicode. De hecho, creo que todos los datos se tratan como UTF-8.

No tuve ningún problema al ejecutar este código:

$ echo ° | awk '/°/{print "found it"}'
found it

Si está creando un script de shell, asegúrese de tenerlo en UTF-8 en lugar de ASCII.

información relacionada