Regular-Expression

如何在 jq gsub 中引用匹配組?

  • July 9, 2021

使用jq,我想通過正則表達式搜尋模式,並用標籤之類的東西包裝匹配的字元串<div>

$ echo "\"This is a valid json file"\" | jq '. | gsub("valid";"how_to_refer_to_matches";"i") -

如何在 的第二個參數中引用匹配的結果gsub

如果有超過 1 個匹配項怎麼辦?

$ jq -n '"some string" | gsub("(?<a>[[:lower:]]+)"; "<div>\(.a)</div>")'
"<div>some</div> <div>string</div>"

或者

$ jq -n '"some string" | gsub("(?<a>[[:lower:]]+)"; "<div>" + .a + "</div>")'
"<div>some</div> <div>string</div>"

這將用相同的字母替換每一行小寫字母,兩側是<div>and </div>。擷取是通過(?<a>RE)wherea是您可以在替換中引用的鍵名使用.a(它不需要是單個字母)以及 whereRE是一些表達式來完成的。您可以同時擷取具有不同鍵名的多個組。

gsub()與Perl、和中的eg gsub()inawk和 like 類似,因此它將為表達式的每個非重疊匹配執行一次替換。這在我上面的範例中進行了說明,其中字元串中的模式有兩個匹配項。s///g``sed``ed


只是使用與您更相似的範例:

$ jq -n '"this is a valid JSON string" | gsub("(?<match>valid)"; "<div>" + .match + "</div>")'
"this is a <div>valid</div> JSON string"

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