像 sed 或 vi 这样的 jq 中的反向引用?

Backreferences in jq like sed or vi?

我在 jq 的输入中有以下字符串:

"\n*blah\n**tim\nbob was here\n*item1\n**item2\n"

而且我能够将第一个 \n* 与以下匹配:

[match("(\n\*[A-Za-z0-9]*\n)";"g")]

这给了我以下匹配项:

[
  {
    "offset": 0,
    "length": 7,
    "string": "\n*blah\n",
    "captures": [
      {
        "offset": 0,
        "length": 7,
        "string": "\n*blah\n",
        "name": null
      }
    ]
  },
  {
    "offset": 25,
    "length": 8,
    "string": "\n*item1\n",
    "captures": [
      {
        "offset": 25,
        "length": 8,
        "string": "\n*item1\n",
        "name": null
      }
    ]
  }
]

然而,我的目标是搜索这些并在匹配的 \n* 行的开头添加额外的 \n

我似乎无法使用 gsub 进行反向引用,所以是否有与 sedvi 中使用反向引用匹配在 [=11= 中可以完成的功能类似的功能]?

这是一个使用命名捕获 ?<a>sub and gsub:

的演示
$ jq -Mn '
  "\n*blah\n**tim\nbob was here\n*item1\n**item2\n"
|    sub("(?<a>\n\*[A-Za-z0-9]*\n)";"\n\(.a)";"g")
  , gsub("(?<a>\n\*[A-Za-z0-9]*\n)";"\n\(.a)")
'

输出

"\n\n*blah\n**tim\nbob was here\n\n*item1\n**item2\n"
"\n\n*blah\n**tim\nbob was here\n\n*item1\n**item2\n"