LINUX.ORG.RU

Grep нужного значения из html

 , , ,


1

1

Добрый день.
Есть такая строчка:

 <tr align="RIGHT"><td>#1</td><td>server<br>192.168.0.11</td><td bgcolor="#add8e6">281.9 k (16.9%)</td><td>11.2 k (3.3%)</td><td>36.7   (14.7%)</td><td>25.0   (12.8%)</td><td>353.3 m (1.7%)</td><td>360.0 m (1.5%)</td></tr>
Она иногда может быть такой:
<tr align="RIGHT"><td>#1</td><td>192.168.0.12</td><td bgcolor="#add8e6">264.3 k (15.9%)</td><td>12.1 k (3.5%)</td><td>25.7   (10.3%)</td><td>20.5   (10.5%)</td><td>1.5   (7.0%)</td><td>1.5   (6.2%)</td></tr> 
Как мне из нее выдергивать ип адрес?


Ответ на: комментарий от resurtm

И шо с этим делать изволите?) Вы авком предлагаете вырезать или что?Не особо понял сути)

cy4apa
() автор топика

Делаю так:

grep -m1 '<td>#1</td><td>'  test.html | tr '<>' '\n\n' | awk '/td/ {getline; print $1 }'
Вывод:
#1
192.168.1.25
612.7
23.3
55.3
38.5
2.3
2.2
Как вытащить только ип?Учитывая что строчки могут быть разными.

cy4apa
() автор топика
Ответ на: комментарий от cy4apa

Добавил:

grep -m1
Теперь все ок)Спасибо!Посмотрим как он поведет себя,если появится server,а затем ип.

cy4apa
() автор топика
Ответ на: комментарий от cy4apa

Нет,если строка выглядит так:

<tr align="RIGHT"><td>#1</td><td>server<br>192.168.0.11</td><td bgcolor="#add8e6">281.9 k (16.9%)</td><td>11.2 k (3.3%)</td><td>36.7   (14.7%)</td><td>25.0   (12.8%)</td><td>353.3 m (1.7%)</td><td>360.0 m (1.5%)</td></tr>
То берется следующий ип,вместо нужного

cy4apa
() автор топика
Ответ на: комментарий от schizoid

Действительно,так и думал что должно быть проще%) Спасибо! Сейчас проверил в разных вариантах,забирает то,что нужно.

cy4apa
() автор топика
 ... |  ruby -e 'require "nokogiri"; puts Nokogiri::HTML(STDIN.read ,nil, "UTF-8").css("tr td[2]").first.content'

server192.168.0.11
192.168.0.12

В первом случае надо убрать слово «server», это оставлю тебе, ты справишься

sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)

Предлагаю ту ссылку выложить прямо перед списком тем. Сколько можно то.

Deleted
()

у тебя всегда IP между > <? тогда

sed -rn 's/.*>([0-9.]+)<.*/\1/p'
эта строчка выдёргивает последний IP.

Если хочешь первый (Nный), то можно например сначала поставить перед каждым IP \n, а потом взять нужный.

drBatty ★★
()
Ответ на: комментарий от Deleted

Предлагаю ту ссылку выложить прямо перед списком тем. Сколько можно то.

Не поможет. Я считаю, нужно добавить в корутилс генератор парсеров на скриптоте шелле.

AptGet ★★★
()
30 ноября 2012 г.
Ответ на: комментарий от schizoid

Полдня решал задачу выборки адресов из файла. Спасибо за подсказку!!

anonymous
()
Ответ на: комментарий от Deleted

Это уж слишком скучно, поэтому предлагаю тебе написать аналитическую статью о применимости положений той ссылки к html различной степени испорченности и навороченности.
Применять рекомендую методы математической индукции, как-то:
1) возьмем вырожденный корректный html состоящий всего из 2х тегов, и посмотрим можно ли его парсить регулярками
...
n) возьмем вырожденный корректный html состоящий всего из n тегов, и посмотрим можно ли его парсить регулярками

zolden ★★★★★
()
13 января 2013 г.
sed -e «/^.*[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}.*$/!d» file1.txt > file2.txt
xseed
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.