Маленький однострочник на баше для получения погоды в консольку (на 3 дня)


angel2s2 аватар

angel2s2 - Posted on 07 Май 2009

wget -q -O - http://wap.gismeteo.ru/26702.wml |\
 sed -e '/^<br\/>.*\|<\/\?p>\|<a href.*\|(c).*\|.*wapstart.ru.*\|.*wml.*\|.*?xml.*\|<\/card>/d;s/^.*title="\(.*\)">/\1\n\n/;s/<br\/>//g;s/<img src=.*alt="\(.*\)"\/> <b>\(.*\) .*<\/b>/\1 - \2/g'

Чтобы получить погоду на свой город, идем по линку http://wap.gismeteo.ru/, жмем линк "Другие города", дальше находим свой город и смотрим его адрес, для Калининграда это http://wap.gismeteo.ru/wap2/towns/26702.wap2, вот тут нам нужно число, которое стоит перед ".wap2". Запоминаем его и вписываем в скрипт перед ".wml". Все :)

ЗЫЖ Знаю, что скрипт можно написать и лучше, но писал его "на коленке" за минут 15, главное чтобы работало. Да и не для себя делал, а по просьбе одного знакомого, как простенький пример.

5
Ваша оценка: Ничего Рейтинг: 5 (2 голоса)

Совет отличный! Спасибо тебе. Сделай еще пожалуйста, на подобие таких

Не понял. Чего сделать?

А вот так - в псевдографическом окошке (внимание, окошко с прокруткой!!):

dialog --msgbox "$(lynx -dump -display_charset=cp-1251 http://wap.gismeteo.ua/wap2/towns/33837.wap2)" 40 40 ; clear

А вот так - выкидывает картинкой (только прям сейчас не работает - на Гисметео перенос площадки и этот сервис пока что поломан):

display $(lynx -source http://www.gismeteo.ua/weather/towns/33837.htm | grep "http://informer.gismeteo.ua/33837" | cut -d"\"" -f6)

Можно зарядить в ярлычок на Рабочем столе.

Прикольно :)

Круто :)
Что-то я совсем забыл про него :(

Немного доделал :)

lynx -nolist -dump http://wap.gismeteo.ru/wap2/towns/26702.wap2 |\
 sed -e '1d' | sed -n '1,32p;32q'

Я вот только одного не понял... Почему sed в этом примере у меня работал в "не жадном" режиме, т.е. с каждой строчкой, не выходя за ее пределы. Кто знает?

сед работает строчка за строчкой. что бы обрабатывать весь файл нужно прилагать усилия.

PS
осталось dzen2 прикрутить и будет полный фарш Ж:-)

Почему-то раньше, для других файлов, если я писал например "sed -e 's/^.*$//'", то он весть текст очищал, т.е. просто все стирал. В этом случае этого не происходит.
Даже "sed -e '/^ *$/d'" и "sed -e '/^$/d'" пустые строки почему-то не удаляют. Никак не могу понять, почему (GNU sed версия 4.1.5).

что бы работать со всем файлом как с одной строкой разбитой \n делают так:

sed -ne 'H;${g; тут идет ваша программа ;p}'

Не знал, спасибо :)

> Даже "sed -e '/^ *$/d'" и "sed -e '/^$/d'" пустые строки почему-то не удаляют. Никак не могу понять, почему (GNU sed версия 4.1.5).

всё нормально удаляется, если пустые строки из одних пробелов состоят, а если tab

может проблема изза перевода строки, если виндовые переводы строк \r\n то акие проблемы могут быть.
посмотри hex dump. если там видно 0a 0d, то это виндовый перевод строк.
тогда так

sed -e 's/\r//g;/^[ \t]*$/d'

Да, ты прав, спасибо )

В том-то и дело, что все нормально должно удаляться, но в этом случае у меня не хочет удаляться, делаю так:

wget -q -O - http://wap.gismeteo.ru/26702.wml |\
 sed -e '/^<br\/>.*\|<\/\?p>\|<a href.*\|(c).*\|.*wapstart.ru.*\|.*wml.*\|.*?xml.*\|<\/card>/d;s/^.*title="\(.*\)">/\1\n\n/;s/<br\/>//g;s/<img src=.*alt="\(.*\)"\/> <b>\(.*\) .*<\/b>/\1 - \2/g' |\
 sed -e '/^$\|^ *$\|^\t$/d'

вместо

sed -e '/^$\|^ *$\|^\t$/d'
sed -e '/^[ \t]*$/d'

PS
\t - только в gnu sed

Хм... Логично :)

> Почему-то раньше, для других файлов, если я писал например "sed -e 's/^.*$//'", то он весть текст очищал

дык, каждую строку если почистить получится пустой файл

Дык, присмотрись к команде... Эта команда не все совпадения будет чистить, а только первое. Значит должна только первую строчку подчистить.

Вот разница, сравнивай:

sed -e 's/^.*$//'   # Первое вхождение
sed -e 's/^.*$//g'  # Все вхождения

"Первое вхождение" и "все вхождения" -- это в рамках одной строки, а не одного файла, вы просто позабыли. Сравните
cal | sed 's/1/-/' и cal | sed 's/1/-/g'

Действительно забыл. Умываю руки :)

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.