Grep
為什麼我的腳本中的 unix 核心實用程序無法辨識空格?
我正在編寫一個簡短的腳本來拉動比特幣的價格。資訊將通過管道傳輸到 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
您是否想使用
grep
and來執行此操作cut
,然後執行類似的操作curl -s 'https://gbp.rate.sx/btc?T' | grep '^avg:' | cut -d ' ' -f 2
要從中刪除磅符號,只需將其通過管道
cut -c 2-
或tr -d '£'
在末尾。請注意,僅輸出此結果,沒有理由首先將其放入變數中。