【问题标题】:Replace \n with space in jq query/command output without tr and sed commands在没有 tr 和 sed 命令的 jq 查询/命令输出中用空格替换 \n
【发布时间】:2020-11-24 01:41:19
【问题描述】:

下面是我的输入文件,比如 input.json

{
  "server1": {
    "name": "server1",
    "property": "ENABLED"
  },
  "server2": {
    "name": "server2",
    "property": "ENABLED"
  },
  "server3": {
    "name": "server3",
    "property": "ENABLED"
  },
  "server4": {
    "name": "server4",
    "property": "ENABLED"
  },
  "server5": {
    "name": "server5",
    "property": "ENABLED"
  },
  "server6": {
    "name": "server6",
    "property": "ENABLED"
  }
}

我正在运行以下 jq 查询:

jq -r '.[] | select(.property == "ENABLED") |.name' input.json

我得到以下输出:

server1
server2
server3
server4
server5
server6

我希望我的输出没有任何新行,如下所示,用空格分隔,最后一个单词后没有空格(本例中为 server6)

server1 server2 server3 server4 server5 server6

我不想在 jq 命令之后做管道并使用 sed 和 tr 命令获取输出。我只想用 jq 命令来实现这一点。将不胜感激。谢谢。

【问题讨论】:

标签: bash shell unix filter jq


【解决方案1】:

你离那里很近了!在您的情况下,join 函数可能会有所帮助:

jq -r '[.[]|select(.property=="ENABLED")|.name]|join(" ")' input.json

通过将所有名称包装在一个数组中,join 函数就像在 python 中那样工作。来自文档:

加入(字符串)

连接作为输入的元素数组,使用参数作为分隔符。它是split的逆:即运行 分裂(“富”)| join("foo") 在任何输入字符串上返回所述输入字符串。

jq ´join(", ")´
   ["a","b,c,d","e"]
=> "a, b,c,d, e"

【讨论】:

  • 太棒了。我之前尝试过加入,但它没有给我预期的输出,因为我没有将它包装在一个数组中。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 2022-01-10
  • 2018-09-16
相关资源
最近更新 更多