it-gundan.com

jq로 파이프 한 후 파일에 출력 쓰기

jq를 통과 한 파이프 출력을 셸의 파일로 작성하는 방법

예:

curl api.example.com | jq > call.txt

작동하지 않습니다. 둘 다

(curl api.example.com | jq) > call.txt

도움!

편집 : curl api.example.com > call.txt 잘 작동합니다. 따라서 파이프를 jq

17
supersize

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 = ".";

즉, stdoutis TTY이고 stdinis not ​​TTY 인 경우 기본 필터를 사용하십시오.

이 동작은 커밋 5fe05367 에서 다음 코드 조각으로 수정 된 것으로 보입니다.

if (!program && (!isatty(STDOUT_FILENO) || !isatty(STDIN_FILENO)))
  program = ".";
22
Attie

내 주문 :

$ 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" } }
3
Jarikus