Как работать с непечатаемыми символами на клавиатуре?

Как работать с непечатаемыми символами на клавиатуре?

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

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

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

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

 yes

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

решение2

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

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

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

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

Связанный контент