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