我正在写一个简短的脚本来拉动比特币的价格。该信息将通过管道传输到 i3block 中,以便我可以在状态栏上看到每小时的价格 - 这是我到目前为止所拥有的。
#!/bin/bash
price=$(curl -s gbp.rate.sx/btc?T | tail -3 | head -1 | grep -o '[0-9]*' | cut -d ' ' -f1)
echo $price
我计算出比特币价格(以英镑为单位)率.sx使用 T 选项(仅文本,无 ANSI 序列),使用头和尾选择平均价格线并 grep 出数字。输出看起来像这样:
26563 26396 1738 8 6 29
第一个数字是平均价格,其他数字是中位数、变化等...如您所见,我将其通过剪切传递,并以空格作为分隔符,但输出未剪切。
我还尝试将空格替换为“,”以尝试将输出转换为 csv,但这也失败了。
price=$(curl -s gbp.rate.sx/btc?T | tail -3 | head -1 | grep -o '[0-9]*' | sed 's/ /,/' )
上面也给了我相同的输出。为什么要cut
努力sed
识别空白?
答案1
您自己的管道遇到的问题是您没有意识到输出grep
是多个线long,每行一个整数。数字仅在同一行输出,因为您使用了$price
不带引号的内容。
如果您想要平均价格,即标签后的金额avg:
,那么最简单的方法是awk
:
curl -s 'https://gbp.rate.sx/btc?T' |
awk '/^avg:/ { print $2 }'
上面的代码awk
所做的是打印以 text 开头的每一行中的第二个空格分隔的字段avg:
。
这会给你类似的东西£26421
。如果您想要不带英镑符号的金额,请使用print substr($2,2)
代替print $2
。
您想使用grep
andcut
来执行此操作,然后执行类似的操作吗
curl -s 'https://gbp.rate.sx/btc?T' |
grep '^avg:' | cut -d ' ' -f 2
要从中删除英镑符号,只需将其通过管道cut -c 2-
或tr -d '£'
放在最后即可。
请注意,如果只是输出结果,则没有理由首先将其放入变量中。
答案2
输出看起来像这样:
echo $price 26563 26396 1738 8 6 29
这是因为$price
未加引号,这使得 shell 在空白处将其分割。echo
获取多个参数,并用单个空格连接。
参见例如:什么时候需要双引号?