我想获得以下数据:AAPL
在以下 cURL 上使用 sed:curl -s "http://www.google.com/ig/api?stock=AAPL"
Google API 给了我一个 XML 答案,包含 APPL 的标签是<symbol data=""/>
ie<symbol data="AAPL"/>
是否可以使用一个 sed 给我来自 2 个 XML 标签的数据?
我正在运行 MAC OS X 10.8.2,而且我对 Unix bash/shell 命令还是很陌生。
这有点冗长——你可以使用 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/'
不是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"/>