【发布时间】:2018-06-15 20:43:40
【问题描述】:
输入:
{ "names" : ["name1","name2","name3","pat_name4"] }
需要的输出:
{ "names" : ["name1","name2","name3"] }
目前我通过运行命令过滤掉所有以pat_开头的名称
cat file | jq .names | grep -Ev '^(pat_)'
这是
["name1","name2","name3"]
想知道是否可以对 jq 命令进行一些更改以获得所需的格式。
【问题讨论】:
-
这个问题不是很清楚。您的数据已经是 JSON 格式。您似乎正在做的唯一更改是从数组中删除其中一个字符串。你根本没有改变格式。
-
@Barmar - OP 希望输出作为对象,而不是数组。这就是“格式”问题。但是,关于是否应排除与正则表达式匹配的所有项目的问题尚不清楚。 Sandeep - 请澄清一下。
-
顺便说一句,
cat file | jq写成<file jq、jq <file或jq ... file会更有效。对于jq来说,性能差异并不是很大,但这是一个好习惯,因为对于其他程序来说它可能会更大——例如,对于wc -c,它是 O(1) 和一个真正的文件句柄(可以seek()和tell()在恒定时间内),但 O(n) 使用管道。同样,sort可以与可搜索句柄并行化,但必须使用管道从前面读取。 -
@CharlesDuffy 在这样的例子中,
cat file | something通常是some command that produces output | something的占位符 -
@CharlesDuffy 感谢您的意见。这只是 Barmer 指出的一个例子
标签: arrays bash shell filter jq