【问题标题】:Conditional sed with a grep带有 grep 的条件 sed
【发布时间】:2017-04-05 12:25:32
【问题描述】:

如果下一行的food包含raspberry
strawberry
apple
但如果搜索不匹配,请不要理会它。文件内容示例如下:

{
"team":"veg",
"food":"raspberry",
},
{
"team":"veg",
"food":"carrot",
},
{
"team":"veg",
"food":"strawberry",
}

如果它更适合,很高兴使用另一个工具:) 我将替换文件(理想情况下),因此可能需要带有 -i 标志的 sed。

谢谢

【问题讨论】:

  • jq 将是这样做的推荐方式...
  • 或者任何 json 解析器
  • 我正在使用 jq 来解析文本(jq '.'),它可以与条件语句一起使用吗?
  • 目前,您的示例不是有效的 JSON...真的是这样吗?
  • @user3229731,告诉我你的jq是什么版本?

标签: sed bash sed grep jq


【解决方案1】:

我们来了,jq 方法:

一个有效的 json 输入应该是这样的(比如test.json):

[
  {
    "team": "veg",
    "food": "raspberry"
  },
  {
    "team": "veg",
    "food": "carrot"
  },
  {
    "team": "veg",
    "food": "strawberry"
  }
]

jq 'map(select(.food == "strawberry" or .food == "raspberry" or .food == "apple").team |="fruit")' test.json

输出:

[
  {
    "team": "fruit",
    "food": "raspberry"
  },
  {
    "team": "veg",
    "food": "carrot"
  },
  {
    "team": "fruit",
    "food": "strawberry"
  }
]

map(x) 对于任何过滤器 xmap(x) 将为每个过滤器运行该过滤器 输入数组的元素,并在新数组中返回输出

|="fruit" - 更新分配https://stedolan.github.io/jq/manual/#Assignment

【讨论】:

  • 这看起来很有希望,我现在就测试一下!
  • 完美,效果非常好 - 我希望我早点想到这样做,jq 真的来救援了!
  • @user3229731,是的,我也喜欢这个工具
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2014-02-02
  • 2020-04-12
相关资源
最近更新 更多