jq gsubで一致するグループを参照する方法は?

jq gsubで一致するグループを参照する方法は?

を使用してjq正規表現とラップでパターンを検索したいと思います。マッチ<div>次のラベルを持つ文字列

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

2番目のパラメータで一致結果をどのように参照できますかgsub
一致する項目が1つ以上の場合はどうなりますか?

ベストアンサー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>横の同じ文字に置き換えられます</div>。キャプチャは、交換時に参照するために使用できるキー名(単一文字である必要はありません)と、一部の式がどこにあるかによって異なり(?<a>RE)ます。異なるキー名を持つ複数のグループを同時にキャプチャできます。a.aRE

gsub()これは、たとえばPerlと同様に機能するため、式gsub()awk重複しない各一致に対して置換を実行します。これは、文字列のパターンに2つの一致がある上記の例で説明されています。s///gseded


あなたに似た例を使用するには:

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

おすすめ記事