使用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///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"