Wie arbeite ich mit einem nicht typisierbaren Tastaturzeichen?

Wie arbeite ich mit einem nicht typisierbaren Tastaturzeichen?

Ich bin gerade dabei, ein Bash-Skript zu erstellen, um Weather.com nach dem Wetterbericht zu durchsuchen. Ich muss eine Textzeile verarbeiten, die ein ungewöhnliches Zeichen enthält. Hier ist der Text:

30°FHoch 35°Hoch 52°Hoch 45°Hoch 43°Hoch

Zwischen den Zahlen und Buchstaben befindet sich ein kleiner Kreis. Hier ist der Code:

#!/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

Dies führt zu keiner Ausgabe.

Antwort1

Am einfachsten geht das, indem man dem Gradsymbol einen Punkt hinzufügt.

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

Zum Beispiel

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

yes

(\0260 ist das Oktalzeichen für das Gradsymbol in Ihrer Frage)

Wenn Sie eine genaue Übereinstimmung wünschen, müssen Sie den Wert in der verwendeten Kodierung ermitteln. Im Text Ihrer Frage scheint es 0xb0 zu sein.

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

 yes

\0260 und \xb0 veranschaulichen lediglich zwei Möglichkeiten, dasselbe anzuzeigen.

Antwort2

Moderne Linux-Shells sind Unicode-kompatibel. Ich glaube, alle Daten werden tatsächlich als UTF-8 behandelt.

Ich hatte kein Problem beim Ausführen dieses Codes:

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

Wenn Sie ein Shell-Skript erstellen, achten Sie darauf, dass es in UTF-8 und nicht in ASCII vorliegt.

verwandte Informationen