implicit def circeJsonDecoder[A](
implicit decoder: Decoder[A]
): EntityDecoder[Task, A] = jsonOf[Task, A]
implicit def circeJsonEncoder[A](
implicit encoder: Encoder[A]
): EntityEncoder[Task, A] = jsonEncoderOf[Task, A]
我想在所有位置用“ 0.279.0-b1-abc-1234-0716.9856”替换“ 0.279.0-b1-abc-1234-0716.4567”。
My json
{
"license": " See license.md",
"dependencies": {
"@gx/core": "0.279.0-b1-abc-1234-0716.4567",
"@gx/api": "0.279.0-b1-abc-1234-0716.4567",
"@gx/name": "0.279.0-b1-abc-1234-0716.4567"
}
}
jq '.dependencies[].["@gx/core"] |= (if . == "0.279.0-b1-abc-1234-0716.4567" then "0.279.0-b1-abc-1234-0716.9856" else . end)' info.json
答案 0 :(得分:1)
如果您打算考虑使用非jq解决方案,请允许我在此处提供一种基于步行路径Unix实用程序 jtc
:
bash $ <file.json jtc -w'[dependencies]<0\.279\.0\-b1\-abc\-1234\-0716\.4567>R:' -u'"0.279.0-b1-abc-1234-0716.9856"'
{
"dependencies": {
"@gx/api": "0.279.0-b1-abc-1234-0716.9856",
"@gx/core": "0.279.0-b1-abc-1234-0716.9856",
"@gx/name": "0.279.0-b1-abc-1234-0716.9856"
},
"license": " See license.md"
}
bash $
步行路径(-w
):
[dependencies]
地址(从根开始)给定记录<...>R:
-一个搜索词素,使用RE(后缀R
)查找与给定reg.expression匹配的所有(量化词:
)条目。 -u
将更新(替换)所有找到的匹配项。
-或-
使用您的RE,同时匹配标签和值:
bash $ <file.json jtc -w'[dependencies]<@gx/[a-z]*>L:<^(\d+\.){2}[0-9]+(-[a-zA-Z0-9]*){4}\.[0-9]*$>R' -u'"0.279.0-b1-abc-1234-0716.9856"'
PS>披露:我是jtc
工具的创建者
答案 1 :(得分:1)
使用jq,有许多方法具有不同的语义,从对第一个问题的这些解决方案中可以看出(没有正则表达式):
walk(if . == "0.279.0-b1-abc-1234-0716.4567"
then "0.279.0-b1-abc-1234-0716.9856" else . end)
一种更具针对性的方法:
.dependencies |=
map_values(if . == "0.279.0-b1-abc-1234-0716.4567"
then "0.279.0-b1-abc-1234-0716.9856" else . end)
上述方法也可以用于正则表达式搜索,例如最后一种情况将变为:
.dependencies |= with_entries(
if (.key | test("@gx/[a-z]*"))
and (.value | test("^(\\d+\\.){2}[0-9]+(-[a-zA-Z0-9]*){4}\\.[0-9]*$"))
then .value = "0.279.0-b1-abc-1234-0716.9856" else . end)
请注意,正则表达式字符串必须为JSON字符串,因此反斜杠加倍。
if
(无else
如果您有足够新的jq版本,则那些悬挂的“ else”出现。可以删除。