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.