2013-04-22 4 views
0

У меня возникли проблемы с использованием grep через какой-либо HTML-код.Лучший способ Grep для html

Я пытаюсь найти подобные строки в этом

<td><a href='/go/12229' target="_blank" rel="nofollow">product description here</a></td><td> $<font color='red'>0.25</font> 

я пытаюсь обобщить формулу для подсчета каждой строки, которая находится под $ 0,25 части, которые будут варьироваться в зависимости являются: HREF = '/ идти/12229' число после/идти/будет меняться, но всегда быть числом 5 цифр длиной

описание продукта может быть буквенно-цифровым с пробелами и специальными символами

и цена может быть что угодно, от 0,01 до 0,25

Я пробовал делать формулы, подобные приведенным ниже, но он либо не работает, либо ничего не возвращает.

grep -c "href='/go/'[*] target="_blank" rel="nofollow">*</a></td><td> $<font color='red'>[0].[0-2][0-9]</font>" 

Я думаю, что это связано с тем, что я не избегаю специальных символов правильно, но я не уверен.

Любая помощь приветствуется.

+0

Какая часть этой строки требуется для ее идентификации? Например, достаточно ли знать, что существует «go» href, например «grep» go \/[0-9] \ {5 \} ''. Если это так, я бы сделал этот grep, а затем передал его awk/gawk (или другому языку сценариев), чтобы проверить значение. – n0741337

+0

Мне нужна ссылка, описание продукта и цена – almyz125

ответ

0

ОК - это требует, чтобы каждая строка формировалась как в вашем примере, но это должно дать вам ссылку, описание и цены, где каждая строка находится между 0,01 и 0,25. В содержание этого закодировать поместить их в файл как «priceawk» и сделать его исполняемым:

grep 'go\/[0-9]\{5\}' | awk -F"<" ' 
{ 
split($7, price_arr, ">") 

if(price_arr[ 2 ] > 0.00 && price_arr[ 2 ] < 0.26) 
    { 
    split($3, link_arr, "'\''") 
    split(link_arr[ 3 ], desc_arr, ">") 
    printf("%s %s %s\n", link_arr[ 2 ], desc_arr[ 2 ], price_arr[ 2 ]) 
    } 
} ' 

Затем используйте это нравится:

cat input | priceawk 

С тест входного файла, который я сделал из вашей линии , я получаю следующие виды продукции:

/go/12229 product description here 0.25 
/go/13455 find this line2 0.01 
/go/12334 find this line3 0.23 
/go/34455 find this line4 0.16 

Е() может быть улучшена, чтобы дать свой вывод в другой форме, более полезным, чем разделителем текущего пространства.

+0

Я не получаю никакой оттуда, я хочу, чтобы пространства, где были возвраты? и я хочу поместить путь к моему файлу, где у вас есть «greptest»? – almyz125

+0

Да. Я переформатирую ответ, чтобы сделать его файлом, который вы можете превратить в исполняемый файл. – n0741337

+0

Хм, я сделал то, что вы сказали, но оболочка по-прежнему возвращается без вывода, может быть, проще ее написать вывод в файл? Благодарим вас за помощь! – almyz125