如何引用jq gsub中的匹配组?

如何引用jq gsub中的匹配组?

使用jq,我想通过正则表达式搜索模式,并包装匹配的带有<div>标签之类的字符串

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

如何引用第二个参数中的匹配结果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)wherea是一个键名完成的,您可以在替换时使用它来引用.a(它不需要是单个字母),而 whereRE是一些表达式。您可以同时捕获具有不同键名称的多个组。

gsub()其工作方式类似于Perl、、 and中的 例如gsub()inawk和 like ,因此它将对表达式的每个非重叠匹配执行一次替换。这在我上面的示例中进行了说明,其中字符串中的模式有两个匹配项。s///gseded


只是为了使用与您更相似的示例:

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

相关内容