在HTML中过滤文本和打印解析过滤器

时间:2011-11-04 21:18:48

标签: regex sed awk

我有一个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 个答案:

答案 0 :(得分:2)

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 

答案 1 :(得分:0)

这个sed解决方案可能有效:

sed 's/^<outline text="\([^"]*\)" type="rss" xmlUrl=\("[^"]*"\) htmlUrl=\("[^"]*"\) \/>/<a href=\2 title=\3>\1<\/a>/' input_file