我应该在cURL Google API上使用哪种sed语法

时间:2013-01-26 21:17:23

标签: curl sed

我想获得以下数据: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命令很新。

3 个答案:

答案 0 :(得分:1)

更好地使用xmllint shell命令(由libxml安装)和Xpath表达式。

答案 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"/>