Shell-Script
如何從行中擷取參數和值
我們只想擷取參數 -
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 和 BSDsed
,但如果失敗,請查閱有關如何啟動 ERE 的手冊頁)要更有選擇性,請嘗試
sed -E '/"segment\.bytes":"[0-9]+"/s/.*"(segment\.bytes)":"([0-9]+)".*/\1:\2/'
在行搜尋和值擷取部分中,它只接受一個整數值。