Фильтр для текста и печать разобранных фильтров в HTML - PullRequest
0 голосов
/ 05 ноября 2011

У меня есть файл OPML, который я хотел бы проанализировать ссылки и имена для создания списка в формате HTML.

<outline text="Wired Features" type="rss" xmlUrl="http://downloads.wired.com/podcasts/xml/features.xml?_kip_ipx=1854665749-1310493405" htmlUrl="http://www.wired.com" />
<outline text="ArcSight Podcasts" type="rss" xmlUrl="http://www.arcsight.com/podcasts/itunes/" htmlUrl="http://www.arcsight.com" />

Используя SED или что-то подобное, я хотел бы напечатать элементы в соответствующем HTML-выводе, т.е.

<a href="http://downloads.wired.com/podcasts/xml/features.xml?_kip_ipx=1854665749-1310493405" title="http://www.wired.com">Wired Features</a>

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011
perl -nle'
  ($text)  = /text="(.*?)"/   ;
  ($url)   = /xmlUrl=(".*?")/ ;
  ($title) = /htmlUrl=(".*?")/;
  /./ and printf "<a href=%s title=%s>%s</a>\n",
     $url, $title, $text; 
  ' infile

При условии, что в заинтересованных частях нет встроенных новых строк.

С XMLgawk :

xgawk -lxml 'XMLSTARTELEM  {
  printf "<a href=%s title=>%s>%s</a>\n",
    q XMLATTR["xmlUrl"] q, q XMLATTR["htmlUrl"] q, XMLATTR["text"]
  }' q=\" infile

Редактировать: Perl решение может быть переписано с одним регулярным выражением:

perl -nle'
  /text="(.*?)".*xmlUrl=(".*?").*htmlUrl=(".*?")/
    and printf "<a href=%s title=%s>%s</a>\n",
     $2, $3, $1; 
  ' infile 
0 голосов
/ 05 ноября 2011

Это решение может работать:

sed 's/^<outline text="\([^"]*\)" type="rss" xmlUrl=\("[^"]*"\) htmlUrl=\("[^"]*"\) \/>/<a href=\2 title=\3>\1<\/a>/' input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...