
を使用して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
.a
RE
gsub()
これは、たとえばPerlと同様に機能するため、式gsub()
とawk
重複しない各一致に対して置換を実行します。これは、文字列のパターンに2つの一致がある上記の例で説明されています。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"