2011-02-01 2 views
1

Я пытаюсь получить текст с html-страницы в оболочке, как часть сценария, чтобы показать мне температуру в моей локальной области.Получение текста из html-страницы, оболочки

Я же не могу получить мою голову вокруг, как использовать Grep правильно

Отрывок из веб-страницы

</div><div id="yw-forecast" class="night" style="height:auto"><em>Current conditions as of 8:18 PM GMT</em><div id="yw-cond">Light Rain Shower</div><dl><dt>Feels Like:</dt><dd>6 &deg;C</dd><dt>Barometer:</dt><dd style="position:relative;">1,015.92 mb and steady</dd><dt>Humidity:</dt><dd>87 %</dd><dt>Visibility:</dt><dd>9.99 km</dd><dt>Dewpoint 

Кроме короче сократить дополнительно

<dt>Feels Like:</dt><dd>6 &deg;C</dd> 

Попытка захватить 6 ° C

Я пробовал различные тактики, включая grep и awk. Может ли мастер оболочки помочь мне?

ответ

1

Попробуйте

grep -o -e "<dd>.*deg;C</dd>" the_html.txt 

От человека странице:

-e PATTERN, --regexp=PATTERN 
     Use PATTERN as the pattern. This can be used to specify 
     multiple search patterns, or to protect a pattern beginning with 
     a hyphen (-). (-e is specified by POSIX.) 

... 

-o, --only-matching 
     Print only the matched (non-empty) parts of a matching line, 
     with each such part on a separate output line. 

Если вы хотите избавиться от <dd> и </dd> тоже, просто добавьте | cut -b 5-12.

+0

$ Grep -o -e "

[^ <]*deg;C
" /tmp/weather.html $ C –

+0

Право. Обновлен ответ, чтобы включить, как избавиться от этих dd-тегов. – aioobe

+0

Спасибо, эта проблема сводила меня с ума! –

0

Если х ваш входной файл и исходный HTML является также регулярно отформатирован в качестве записи, это должно работать -

Grep град х | SED -e "S #^> ([0-9] {1,2} \ ° [CF]) < # \ 1 #."

Сет

1

Дайте это попробовать:

grep -Po '(?<=Feels Like:</dt><dd>).*?(?=</dd>)' | sed 's/ &deg;/°/' 

Результат:

6°C 
+0

Хорошая идея, я думал о поиске, но читал, что она не была реализована в 'grep' ...' -P' делает трюк :-) – aioobe

Смежные вопросы