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

imagenes

Estoy en el proceso de hacer un script de bash para raspar un weather.com para obtener el informe del clima.
Necesito procesar una línea de texto que tiene un carácter inusual. Aquí está el texto:

30 ° FAlta 35 ° Alta 52 ° Alta 45 ° Alta 43 ° Alta

Hay un pequeño círculo entre los números y las letras. Aquí está el código:

#! / bin / bash

claro

lince --volcar http: //www.clima.com/clima/5-día/Nuevo+York+Nueva York+10001 | \
egrep 'Hoy | Esta noche ' -UNA 22 | awk 'COMIENZO {print "\ n \ t \ t \ b \ b \ b \ b \ b \ bTHE FIVE DAY \
INFORME METEOROLÓGICO PARA LA 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 salida.


Tenemos varias respuestas

La mejor respuesta:

La forma más fácil es usar un punto para que coincida con el símbolo de grado.

/ [0-9] [0-9] *. [una-z|UNA-Z] + /

Por ejemplo

$ eco -mi "30 \ 0260FHigh" \
| awk '/[0-9◆◆0-9 * [[[print print print print print

(\ 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.

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

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


Otra respuesta

El shell moderno de Linux es muy consciente de Unicode. De hecho, creo que todos los datos son tratados como UTF-8.

No tuve ningún problema ejecutando este código:

$ eco ° | awk '/ ° / {print "found it"}'
Lo encontré

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


Fuente

Leave a Reply