Grep

為什麼我的腳本中的 unix 核心實用程序無法辨識空格?

  • January 17, 2021

我正在編寫一個簡短的腳本來拉動比特幣的價格。資訊將通過管道傳輸到 i3block 中,以便我可以在狀態欄上查看每小時價格 - 這是我目前所擁有的。

#!/bin/bash
price=$(curl -s gbp.rate.sx/btc?T | tail -3 | head -1 | grep -o '[0-9]*' | cut -d ' ' -f1)
echo $price

我使用 T 選項(僅文本,無 ANSI 序列)從rate.sx捲曲比特幣價格(以英鎊為單位),使用頭部和尾部選擇平均價格線並 grep 出數字。輸出看起來像這樣:

26563 26396 1738 8 6 29

第一個數字是平均價格,其他數字是中位數、變化等…如您所見,我通過 cut 以空格作為分隔符,但輸出未切割。

我還嘗試將空格交換為“,”以嘗試將輸出轉換為 csv,但這也失敗了。

price=$(curl -s gbp.rate.sx/btc?T | tail -3 | head -1 | grep -o '[0-9]*' | sed 's/ /,/' )

以上也給了我相同的輸出。為什麼要cut努力sed辨識空白?

您自己的管道遇到的問題是您沒有意識到輸出grep有幾行長,每有一個整數。這些數字僅在同一行輸出,因為您使用的是$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

您是否想使用grepand來執行此操作cut,然後執行類似的操作

curl -s 'https://gbp.rate.sx/btc?T' |
grep '^avg:' | cut -d ' ' -f 2

要從中刪除磅符號,只需將其通過管道cut -c 2-tr -d '£'在末尾。

請注意,僅輸出此結果,沒有理由首先將其放入變數中。

引用自:https://unix.stackexchange.com/questions/629559