2014-01-03 4 views
0

Я не парень Греп и задаю здесь вопрос, чтобы команда grep решила эту проблему быстро.Как написать команду Grep для этого случая?

Учитывая HTML текст, как эти,

<tr><td class="font_face" style="font-family:HelveticaNeue">HelveticaNeue</td><td class="iphone">3.0</td><td class="ipad">4.3</td></tr> 
<tr><td class="font_face" style="font-family:HelveticaNeue-Bold">HelveticaNeue-Bold</td><td class="iphone">3.0</td><td class="ipad">4.3</td></tr> 
<tr><td class="font_face" style="font-family:HelveticaNeue-BoldItalic">HelveticaNeue-BoldItalic</td><td class="iphone">3.0</td><td class="ipad">4.3</td></tr> 

нужно Grep одобряет, чтобы получить выход, как эти

HelveticaNeue 
HelveticaNeue-Bold 
HelveticaNeue-BoldItalic 

Спасибо очень много!

ответ

2

Если вы действительно хотите использовать grep, вы могли бы сказать:

grep -Po '(?<=font-family:).*?(?=")' filename 

Для вашего входа, было бы вернуть:

HelveticaNeue 
HelveticaNeue-Bold 
HelveticaNeue-BoldItalic 

EDIT: Как mentioned по Kent, можно также сказать, :

grep -Po '(?<=font-family:)[^"]*' filename 
+1

+1 хорошо осмотреться. это может быть короче (и быстрее?): '' (? <= ...) [^ "] * '' – Kent

+0

@Kent Полностью согласен. – devnull

0

Этот awk shou л.д. сделать:

awk '{gsub(/<[^>]*>/,FS);print $1}' file 
HelveticaNeue 
HelveticaNeue-Bold 
HelveticaNeue-BoldItalic 

Это awk удаляет все между < и >
Это дает HelveticaNeue 3.0 4.3, мы затем распечатать поле #1

0

Вы можете использовать Perl, а также:

perl -lne 'print $1 if(/font-family:([^\"]*)\"/)' your_file 
0

Пусть ваши данные Содержит файл Test.html

Тогда Вы можете использовать следующую команду:

cat Test.html | awk -F '">' '{print $2}' | awk -F "</" '{print $1}' 

Выход:

HelveticaNeue 
HelveticaNeue-Bold 
HelveticaNeue-BoldItalic 
Смежные вопросы