В скрипте будильник обнаружил проблемы при текущей температуре ноль градусов. Проблема вызвана отсутствием знака температуры. Кто поможет доработать строку
CURR_DEGREE="`echo $CURR_TEMP | sed -r 's/.([0-9]+)/\1/g'`"
в случае с нулём градусов на сайте gismeteo
Присоединяюсь к просьбе о помощи. Команда:
wget -t 1 -q -O -
http://www.gismeteo.ru/city/daily/ВАШ_ГОРОД/ | grep -m 1 '<div class="temp">' находит строку <div class="temp">0°C</div>.
Команда sed -r 's/<div class="temp">(.[0-9]+).*/\1/g' обрабатывает ее корректно всегда, за исключением единственного случая, когда температура 0.
Помогите найти лаконичное решение для параметров sed.
Пользователь решил продолжить мысль 11 Декабря 2011, 19:15:09:
Если температура 0, то после обработки командой sed текущей температуры ($CURR_TEMP | sed -r 's/.([0-9]+)/\1/g') на выходе значение "<div".
Это все и портит при озвучивании температуры и при озвучивании знака температуры (у кого это есть, т.к. завязано от текущей температуры).
Костыль сделал, чтобы работало до нахождения более простого решения...
После строки получения текущей температуры с сайта gismeteo
CURR_TEMP=wget -t 1 -q -O -
http://www.gismeteo.ru/city/daily/ВАШ_ГОРОД/ | grep -m 1 '<div class="temp">' | sed -r 's/<div class="temp">(.[0-9]+).*/\1/g' | awk '{print $1}' (ну, или после той строки, где у вас присваивается значение переменной CURR_TEMP, т.к. некоторые предварительно сливают данные во временный файл, а потом извлекают командой cat)
добавил строку:
if [ "`echo $CURR_TEMP | sed 's/[a-z<]//g'`" = "" ]; then CURR_TEMP="0"; fi
(т.е. перед сравнением, командой sed убрал это <div до пустого значения, и присвоил значение "0" переменной CURR_TEMP)
При + сколько-то или - сколько-то | sed 's/[a-z<]//g' не затрагивает цифры-знаки, и все далее работает корректно.
В месте озвучивания знака градуса происходило то же самое.
CURR_DEGREE="`echo $CURR_TEMP | sed -r 's/.([0-9]+)/\1/g'`" (на выходе ранее оставалось <div). А т.к. CURR_TEMP="0", то команда | sed -r 's/.([0-9]+)/\1/g` в данном случае убирает только знак + или -, оставляя цифры. И остается тот же нужный "0" для корректной работы.
Проверил.