2014-12-23 2 views
2

Я пытаюсь напечатать несколько шаблонов с sed.печать нескольких шаблонов с помощью sed

Вот типичная строка для обработки:

(<span class="arabic">1</span>.<span class="arabic">15</span>)</td></tr> 

, и я хотел бы: (1.15)

Для этого я попробовал:

sed 's/^(<span.*">\([0-9]*\).*\([0-9]*\).*">/(\1\.\2)/' 

, но я получаю (1.)15</span>)</td></tr>

Любой мог видеть, что не так?

Благодаря

+0

HTML разбора с REGE Х пятнистый! Чувак, не делай этого с помощью REGEX, используйте правильный парсер HTML –

ответ

0

Причина, почему вы получаете «(1) 15) в качестве выхода»

sed 's/^(<span.*">\([0-9]*\).*\([0-9]*\).*">/(\1\.\2)/' 
              ^^ 

два символа "> необходимо разместить до \([0-9]*\), так как "> в вашей строке перед двумя цифрами (в данном случае). Таким образом, СЭД может найти нужный шаблон

Правильного SED команды

sed 's/^(<span.*">\([0-9]*\).*">\([0-9]*\).*/(\1.\2)/' 
           ^^  

Правильной Командной строку

echo '(<span class="arabic">1</span>.<span class="arabic">15</span>)</td></tr>'|sed 's/^(<span.*">\([0-9]*\).*">\([0-9]*\).*/(\1.\2)/' 

результаты, используя командную строку выше

(1.15) 
+0

Спасибо за ваша помощь. означает ". *" означает все символы и включает также> и "символы? другими словами, включает ли он специальные символы? – youpilat13

+0

. * Означает, что ВСЕ символы, включая> и "до шаблона, например (. *">), Означают все символы до шаблона "> – repzero

+0

ОК, поэтому я понял, что должен указывать символы, предшествующие шаблону , т.е. в моем примере, символы «>? – youpilat13

0

Если данные в одном месте все время, awk может быть более простым решением, чем sed:

awk -F"[<>]" '{print "("$3"."$7")"}' file 
(1.15) 
+0

HTML может измениться, он вообще не предсказуем –

-1
$ lynx -dump -nomargins file.htm 
(1.15) 
+0

Не так уж плохо, если HTML содержит только указанную строку. Если это настоящий HTML-файл, это не нормально –

+0

@sputnick ok, мы получаем его, ваш ответ лучше. Sheesh. –

+0

sputnick хороший .. :) и вы тоже ...: D – repzero

1

Если вы Чак Норрис, использовать , или . Если вы этого не сделали, не используйте регулярное выражение для анализа HTML, вместо этого используйте инструмент, поддерживающий , например . В 2014 году, это решаемая проблема:

xmllint --html --xpath '//span[@class="arabic"]/text()' file_or_URL 

Проверить знаменитый RegEx match open tags except XHTML self-contained tags

xmllint приходит из libxml2-utils пакета (для Debian и производных)

+1

вы должны добавить некоторые ссылки cthulhu и кровоточащие шрифты :) – DRC

+1

Вы имеете в виду это? Http: // StackOverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contains-tags DONE –

+2

На самом деле Чак Норрис может анализировать HTML с регулярным выражением – tinySandy