我想获得以下数据:AAPL
在以下cURL上使用sed:curl -s "http://www.google.com/ig/api?stock=AAPL"
Google API为我提供了一个XML答案,包含APPL的标记为<symbol data=""/>
,即<symbol data="AAPL"/>
是否可以使用一个sed从2个XML标签中获取数据?
运行MAC OS X 10.8.2,我对Unix bash / shell命令很新。
答案 0 :(得分:1)
答案 1 :(得分:1)
它有点冗长 - 你可以使用GNU sed减少它 - 但这应该可以解决问题:
curl -s "http://www.google.com/ig/api?stock=AAPL" |
grep -Eo '<(symbol|last) [^>]*>' |
sed -e 's/.*data="//' -e 's/".*//'
或纯粹sed
(虽然有点野蛮):
curl -s "http://www.google.com/ig/api?stock=AAPL" |
sed -e 's/.*<symbol data="\([^>]*\)"\/>.*<last data="\([^>]*\)"\/>.*/\1 \2/'
答案 2 :(得分:0)
不是sed
。它是一个perl
单行分为几行并使用XML解析器XML::Twig
:
perl-5.14.2 -MXML::Twig -e '
BEGIN {
sub process { printf qq|%s\n|, $_[1]->print }
}
XML::Twig->new(
twig_handlers => {
symbol => \&process,
last => \&process
}
)->parse( qx{curl -s "http://www.google.com/ig/api?stock=AAPL"} )
'
它产生:
<symbol data="AAPL"/>
<last data="439.88"/>