このsed編集でonelinerがクラッシュするのはなぜですか?

このsed編集でonelinerがクラッシュするのはなぜですか?

sedの編集に問題があります。私が実行したとき:

close=`curl 'https://finance.yahoo.com/quote/INTC?p=INTC&.tsrc=fin-srch'|html2text|sed -n '/Add to watchlist/,$p'|sed -n '/At close\:/q;p'|head -n-1|tail -n+3`; echo $close

私は得る:45.60+0.21 (+0.46%)

+ただし、追加の sed コマンドを追加すると、-次のように、最初または前の浮動小数点を除くすべてが削除されます。

close=`curl 'https://finance.yahoo.com/quote/INTC?p=INTC&.tsrc=fin-srch'|html2text|sed -n '/Add to watchlist/,$p'|sed -n '/At close\:/q;p'|head -n-1|tail -n+3|sed -n '/^\([0-9]*\.[0-9]*\)[+-].*$/\1/'`; echo $close

私の出力(エコー)が空です。私が逃したアイデアはありますか?

答え1

パイプライン全体を簡素化できます。

curl ... |
    html2text|
    sed -n '/Add to watchlist/,/At close/s/^\([0-9][0-9]*\.[0-9][0-9]*\)[-+].*/\1/p'

GNUがある場合は、sedより強力なREエンジンを使用して式を少し単純化できます。

sed -rn '/Add to watchlist/,/At close/s/^([0-9]+\.[0-9]+)[-+].*/\1/p'

このsedコマンドは行のみを表示します。含まれている間Add to watchlist」そして「At close」。その範囲内の1つ以上の数字、ドット、および後に+orが続く1つ以上の数字を含む文字列を見つけます-

関連情報