首页 > 解决方案 > 在 shell 中抓取网页的算术

问题描述

所以,我在这里有示例代码:

#!/bin/bash
clear

curl -s  https://www.cnbcindonesia.com/market-data/currencies/IDR=/USD-IDR |
html2text |
sed -n '/USD\/IDR/,$p' |
sed -n '/Last updated/q;p' |
tail -n-1 |
head -c+6 && printf "\n"

exit 0

这应该打印出一些数字范围 14000~15000

让我们从最基本的开始,我必须做什么才能打印result + 1?因此,如果打印输出为 14000 并将其增加到 1 变为 14001。我认为 html2text 的结果是不可计算的,因为它应该是字符串输出而不是整数。

我想知道的更高级的是如何计算 2 curl 结果的结果?

标签: htmlbashcurlcalcexpr

解决方案


我会做什么, +

$ num=$(xidel -se '//div[@class="mark_val"]/span[1]/text()' 'https://url')
$ num=$((${num//,/}+1)) # num was 14050
$ echo $num 

输出

14051

 解释

$((...))

是算术代换。完成算术运算后,整个事情都被表达式的值所取代。见http://mywiki.wooledge.org/ArithmeticExpression

命令替换:"$(cmd "foo bar")"使用参数 'foo bar' 执行命令 'cmd' 并且 "$(..)" 将被替换为输出。请参阅http://mywiki.wooledge.org/BashFAQ/002http://mywiki.wooledge.org/CommandSubstitution

奖金

您可以直接在中计算,感谢Reino使用语法:

$ xidel -s <url> e 'replace(//div[@class="mark_val"]/span[1],",","") + 1' 

并做 2 个值的加法运算:

$ xidel -s <url> -e '
    let $num:=replace(//div[@class="mark_val"]/span[1],",","")
    return $num + $num
'

推荐阅读