簡體   English   中英

正則表達式從字符串中獲取三個數字並將其放入bash中的變量中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM