[英]regex to get three numbers from string and put them into variable in bash
我正在使用curl從網站上獲取json(無換行符)結果,現在我需要從整個字符串中提取兩個數字。
curl -H "Accept:application/json" https://example.com -d ""
返回的結果是:
{"rows":[{"description":"Persistence: Maximum wait time (milliseconds)","name":"maxWaitTime","value":10000.0},{"description":"Persistence: Maximum number of items","name":"sizeThreshold","value":1000.0},{"description":"DB: Number of threads","name":"numberOfThreads","value":10.0}]}
我需要提取這3個數字並將它們放入bash腳本中的變量中。
從“描述”到“值”的每個數字之前的描述都是固定的。
如果發生超時並且卷曲返回錯誤28,則應將“ -1”分配給變量。
我嘗試過類似的方法:
awk '/"name":"numberOfThreads","value":(.*)},/{print $0}'
但它返回整行。
您的JSON缺少[array]
最后兩個{objects}
之間的逗號。 了解到cURL輸出無效的json會讓我感到非常驚訝,但是我將向您展示如何使用jq
從此數據結構中檢索值:
注意: jq
不管結構緊湊(您的示例)還是漂亮打印(下面)都可以工作
{
"rows": [
{
"description": "Persistence: Maximum wait time (milliseconds)",
"name": "maxWaitTime",
"value": 10000
},
{
"description": "Persistence: Maximum number of items",
"name": "sizeThreshold",
"value": 1000
},
{
"description": "DB: Number of threads",
"name": "numberOfThreads",
"value": 10
}
]
}
我們要過濾數組rows
中的所有對象,因此我們先按名稱剝離數組,然后按鍵檢索“值”:
$ jq '.rows[].value' file
10000
1000
10
現在您可以在while循環中遍歷這些結果,但是明智的做法是使用Bash 4的mapfile
和進程替換<()
創建一個Bash數組:
$ mapfile -t Array < <(jq '.rows[].value' file)
$ declare -p Array
declare -a Array=([0]="10000" [1]="1000" [2]="10")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.