Shell-Script

如何從行中擷取參數和值

  • July 27, 2020

我們只想擷取參數 -segment.bytes和他的值

例子

echo "$info" | grep "segment.bytes"
{"version":1,"config":{"segment.bytes":"10737555","retention.bytes":"104857600"}}

我認為是刪除所有單詞,直到segment.bytes刪除segment.bytes包含沒有雙引號的值

預期結果範例

echo "$info" | grep "segment.bytes" |  ......

segment.bytes:10737555

我試試這個

echo "$info" | grep "segment.bytes"   | sed s'/"/ /g' |  sed 's/^.*segment.bytes/segment.bytes/' | awk '{print $1":"$3}

我得到

segment.bytes:10737555

但我覺得我的方法可能很危險,因為獲取值的結果非常敏感和重要,得到錯誤的結果可能是災難性的

我很樂意獲得其他更可靠的選擇

您可以嘗試通過此呼叫管道您的$info變數:sed

echo "$info" | sed -E '/"segment\.bytes"/s/.*"(segment\.bytes)":"([^"]+)".*/\1:\2/'

它將查找帶有模式的行"segment.bytes"並將segment.bytes字元串和以下括號中的字元串(為簡單起見定義為“除了"”)到擷取組 1 和 2,並列印“擷取組 1”、“:”、和“擷取組 2”。

(請注意,啟動擴展正則表達式的選項可能因您的sed版本而異。-E現在是 POSIX 標準,適用於目前的 GNU、MacOS 和 BSD sed,但如果失敗,請查閱有關如何啟動 ERE 的手冊頁)

要更有選擇性,請嘗試

sed -E '/"segment\.bytes":"[0-9]+"/s/.*"(segment\.bytes)":"([0-9]+)".*/\1:\2/'

在行搜尋和值擷取部分中,它只接受一個整數值。

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