如何将通过jq
的管道输出写入shell中的文件
示例:
curl api.example.com | jq > call.txt
不起作用。
也没有(curl api.example.com | jq) > call.txt
帮助!
编辑:这样做curl api.example.com > call.txt
就可以了。所以它与管道jq
答案 0 :(得分:14)
如果jq
不是终端
stdout
会抛出错误
$ curl https://jsonplaceholder.typicode.com/posts/1 | jq > test.txt
jq - commandline JSON processor [version 1.5-1-a5b5cbe]
Usage: jq [options] <jq filter> [file...]
jq is a tool for processing JSON inputs, applying the
given filter to its JSON text inputs and producing the
[...]
尝试jq '.'
(即:漂亮打印输入JSON):
$ curl https://jsonplaceholder.typicode.com/posts/1 | jq '.' > test.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 292 100 292 0 0 1698 0 --:--:-- --:--:-- --:--:-- 1707
请注意,过滤器实际上不是可选的:
来自man jq
:
JQ(1) JQ(1)
NAME
jq - Command-line JSON processor
SYNOPSIS
jq [options...] filter [files...]
根据主分支的提示......你所描述的(以及我观察到的)行为是不可预期的......
jq
的旧版本具有以下内容:(here)
if (!program && isatty(STDOUT_FILENO) && !isatty(STDIN_FILENO))
program = ".";
即:如果stdout
是TTY且stdin
不是 TTY,请使用默认过滤器。
此行为似乎在提交5fe05367中得到纠正,并带有以下代码段:
if (!program && (!isatty(STDOUT_FILENO) || !isatty(STDIN_FILENO)))
program = ".";
答案 1 :(得分:3)
我的咒语:
$ cat config.json
{
"ProgramSettings":
{
"version": "1.0"
},
"ProgramSecrets":
{
"AWS_ACCESS_KEY_ID": "",
"AWS_SECRET_ACCESS_KEY": ""
}
}
假设您要从JSON文件中删除对象“ ProgramSecrets”:
$ echo $(cat config.json | jq 'del(.ProgramSecrest)') > config.json
$ cat config.json
{ "ProgramSettings": { "version": "1.0" } }