为什么这个 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

我的输出(echo)是空的。有什么想法我遗漏了什么吗?

答案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”。在该范围内,它查找包含一个或多个数字、一个点以及一个或多个数字的字符串,以便其后跟+-

相关内容