入力できないキーボード文字を操作するにはどうすればよいですか?

入力できないキーボード文字を操作するにはどうすればよいですか?

私は現在、weather.com から天気予報を取得する bash スクリプトを作成中です。通常とは異なる文字を含むテキスト行を処理する必要があります。テキストは次のとおりです。

30°F高 35°高 52°高 45°高 43°高

数字と文字の間に小さな円があります。これがコードです:

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

出力は生成されません。

答え1

最も簡単な方法は、度記号に合わせてドットを使用することです。

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

例えば

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

yes

(\0260は質問の度記号の8進数です)

正確に一致させたい場合は、使用されているエンコードでその値を特定する必要があります。質問のテキストでは、0xb0 のようです。

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

 yes

\0260 と \xb0 は、同じことを示す 2 つの方法を示しています。

答え2

最近の Linux シェルは Unicode を非常に意識しています。実際、すべてのデータは UTF-8 として扱われると思います。

このコードを実行しても問題はありませんでした:

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

シェル スクリプトを作成する場合は、ASCII ではなく UTF-8 で記述するようにしてください。

関連情報