0

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

4

3 回答 3

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/'
于 2013-01-27T02:48:32.940 回答
1

最好使用xmllintshell 命令(由 libxml 安装)和Xpath表达式。

于 2013-01-26T21:36:54.907 回答
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"/>
于 2013-01-26T22:25:19.720 回答