所以我在网上找到了一个我想要使用的用于在 linux 中解析 xml 的脚本,我希望能在理解该脚本的工作原理以及如何编辑它以供我自己使用方面获得一些帮助。
这是脚本(信用)
#!/bin/bash
cat $1 | awk '
START { pos=1; xml=$0 len=length(xml); endp=1 }
{ while(pos <= len) {
if(substr(xml,pos,7) == "<title>")
{
pos=pos+7;
endp=pos;
while((substr(xml,endp,8) != "</title>") && (endp < len))
{
endp++;
}
print " ",substr(xml,pos,endp-pos)," * ";
pos=endp+7;
}
pos++; } }'
这是我将使用的 xml 数据的简化示例
我已经去掉了标签两边的多余字符,并通过将脚本更改为此进行了一些其他调整
#!/bin/bash
cat $1 | awk '
START { pos=1; xml=$0 len=length(xml); endp=1 }
{ while(pos <= len) {
if(substr(xml,pos,16) == "<sport><![CDATA[")
{
pos=pos+16;
endp=pos;
while((substr(xml,endp,11) != "]]></sport>") && (endp < len))
{
endp++;
}
print "",substr(xml,pos,endp-pos),"";
pos=endp+10;
}
pos++; } }'
所以使用这个脚本给我留下了一个带有这个结果的纯文本文件
Women's Soccer
Men's Soccer
Women's Soccer
最终我希望有一个脚本输出以下
Women's Soccer Away @ South Carolina (Exhibition) at 7:00 PM
Men's Soccer Home vs. Ohio State at 7:00 PM
Women's Soccer Away @ William and Mary at 7:00 PM
对于那些想知道的人,这是调用解析脚本的 shell(忽略文件名和位置)
wget -O rss.xml http://en-us.fxfeeds.mozilla.com/en-US/firefox/headlines.xml
~dsl/bin/rssparse! rss.xml > headlines_$$.tmp
cd /tmp/ldmtrx
split --lines=30 /tmp/headlines_$$.tmp ldmtrxnews
cd /tmp
rm headlines_$$.tmp rss.xml
虽然将不胜感激,但我不希望任何人为我完成这项任务,我真的很想要一些提示和帮助入门。我不确定如何在不同的元素上运行此脚本,然后打印两个元素(例如<sport>
和<homeaway>
)我可以再次运行该脚本,但是这些元素将打印在不同的行上。
最后,我想知道如何排除所有<date>
与今天日期不匹配的数据。谢谢你的帮助。