1

Я нахожусь в процессе создания сценария bash, чтобы очистить weather.com для получения отчета о погоде. Мне нужно обработать строку текста, которая имеет необычный характер. Вот текст:

30 ° FHigh 35 ° High 52 ° High 45 ° High 43 ° High

Между цифрами и буквами есть маленький кружок. Вот код:

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

Это не дает никакого выхода.

2 ответа2

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 восьмерично для символа степени в вашем вопросе)

Если вы хотите точно сопоставить его, вам нужно определить его значение в используемой кодировке. В тексте в вашем вопросе это, кажется, 0xb0.

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

 yes

\0260 и \xb0 просто иллюстрируют два способа обозначить одно и то же.

1

Современная оболочка Linux очень хорошо работает с Unicode. На самом деле, я думаю, что все данные рассматриваются как UTF-8.

У меня не было проблем с запуском этого кода:

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

Если вы создаете сценарий оболочки, убедитесь, что он есть в UTF-8 вместо ASCII.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .