0

次のデータを取得したい:AAPL

次のcURLでsedを使用する:curl -s "http://www.google.com/ig/api?stock=AAPL"

Google APIは私にXMLの答えを与え、APPLを含むタグは<symbol data=""/>すなわち<symbol data="AAPL"/>

1つの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

xmllintシェルコマンド(libxmlによってインストールされる)とXpath式を使用することをお勧めします。

于 2013-01-26T21:36:54.907 に答える
0

ありませんsed。これperlは、複数行に分割され、XMLパーサーを使用する1つのライナー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 に答える