Skip to content

jq 레시피 한눈에 보기

매일 쓰는 jq 필터를 작업별로 묶었습니다: 값 꺼내기, 필터와 선택, 컬렉션 다루기, 값과 문자열 변환, 새 객체나 배열로 재구성, 경로를 그자리에서 수정, 로직으로 분기, 고급 축약 연산까지, 그리고 입력과 출력을 결정하는 명령줄 플래그. 각 행은 필터와 그 결과를 짝지어 보여줍니다.

jq는 필터입니다: stdin에서 JSON을 읽고, 파이프로 구분된 표현식 파이프라인을 실행하고, stdout으로 JSON을 씁니다. 점이 현재 값이며 모든 것이 여기서 출발합니다. 가장 빠른 학습법은 아래 레시피에 실제 데이터를 흘려보내고 출력을 지켜보는 것입니다. jq '필터' file.json 또는 curl ... | jq '필터'로 실행합니다.

참조 표 · 65 항목
65 of 65 rows
접근
전체 입력을 예쁘게 포맷해 출력합니다.
키의 값, 또는 중첩된 키의 값.
이름에 특수 문자가 있는 키의 값.
배열의 첫 번째 요소(음수는 끝에서부터 셉니다).
배열의 각 요소, 또는 객체의 각 값을 각자 한 줄에 출력합니다.
키의 값, 또는 null. 키가 없어도 오류가 없습니다.
필터와 선택
조건이 참이면 입력을 그대로, 아니면 아무것도 출력하지 않습니다.
배열의 모든 요소에 expr을 적용하고 결과를 모읍니다.
객체의 정렬된 키 이름, 또는 값의 배열.
배열이나 문자열의 길이, 또는 객체의 키 개수.
age가 18보다 큰 요소만 하나의 배열로.
컬렉션
최소한 한 개 요소가, 또는 모든 요소가 truthy이거나 필터를 통과하면 참.
키 k가 객체에 존재하면 참. in은 키 쪽에서 같은 검사를 실행합니다.
첫 번째 요소, 마지막 요소, 또는 f의 처음 n개 출력만.
배열에서 가장 작거나 가장 큰 값.
0부터 n까지의 숫자를 각각 별도 출력으로 생성합니다.
중첩된 배열을 하나의 평평한 배열로 합칩니다.
x가 입력 어딘가에 나타나면 참. inside는 역할을 뒤집습니다.
모든 값에 아래에서 위로 f를 적용한 뒤 전체 입력을 다시 조립합니다.
변환
각 요소의 price 필드만 담은 배열.
숫자 배열의 합, 또는 객체 배열의 병합.
값을 문자열로, 또는 숫자 형태의 문자열을 숫자로 변환합니다.
입력을 JSON 문자열 또는 base64로 인코딩합니다.
소문자로 바꾼 문자열.
문자열
expr의 값을 텍스트 안에 끼워 넣은 문자열.
패턴의 모든 일치, 또는 첫 일치만 s로 바꿉니다.
문자열을 구분자 기준 배열로 나누거나, 배열을 하나의 문자열로 이어붙입니다.
문자열을 패턴으로 검사하거나, 일치와 명명된 캡처를 꺼냅니다.
접두사, 또는 접미사가 있을 때만 제거합니다.
참 또는 거짓: 문자열이 s로 시작하거나, s로 끝남.
대문자로 바꾼 문자열.
배열을 CSV 행, TSV 행, 또는 따옴표 처리된 셸 인수로 인코딩합니다.
재구성
입력의 id와 name 필드만 담은 새 객체.
모든 항목의 name으로 이루어진 배열.
객체에서 만든 {key, value} 객체들의 배열.
{key, value} 객체 배열로부터 만들어진 객체.
요소를 cat 필드 기준으로 하위 배열로 묶습니다.
필드 기준으로 정렬하거나, 고유한 id마다 요소 하나만 남깁니다.
업데이트와 경로
키의 값에 f를 실행해 갱신합니다.
키의 값을 v로 덮어씁니다.
count 값에 n을 그자리에서 더합니다.
배열로 주어진 경로의 값을 읽고, 쓰고, 삭제합니다.
제어와 논리
c가 참이면 a, 아니면 b. elif로 분기를 추가할 수 있습니다.
f를 실행하고, f가 실패하면 에러 메시지로 g를 실행합니다.
msg를 담은 에러로 중단합니다. try가 잡지 않는 한.
출력이 아예 없습니다. 해당 분기는 결과에서 사라집니다.
참과 거짓 값을 결합하거나 하나를 뒤집습니다.
고급
전체 배열을 하나의 누적 합계로 접습니다.
reduce와 비슷하지만, 마지막만이 아니라 매 단계 후의 상태를 계속 출력합니다.
다음 입력, 또는 남은 모든 입력을 필터 중간에 가져옵니다.
값을 JSON 텍스트로 출력하거나, JSON 텍스트를 다시 값으로 파싱합니다.
base64 텍스트를 원래 문자열로 디코딩합니다.
구조 깊은 곳에 대입하며, 없는 계층은 그 과정에서 만듭니다.
null도 false도 아니면 a, 그렇지 않으면 b(기본값).
키 하나를 제거한 입력.
입력의 모든 경로를 키 배열로, 위에서 아래로 출력합니다.
변수와 CLI
$name을 셸 문자열로 정의해 필터 안에서 사용할 수 있게 합니다.
$name을 원시 JSON에서 정의합니다. 숫자, 불리언, 배열, 객체용입니다.
$name을 JSON 파일 전체 내용으로 정의합니다.
문자열 결과를 따옴표와 이스케이프 없이 그대로 출력합니다.
각 결과를 들여쓰기 없이 한 줄로 간결하게 출력합니다.
필터를 null에 대해 한 번 실행해 무에서 출력을 만듭니다.
필터가 실행되기 전에 입력 전체를 하나의 배열로 읽습니다.
마지막 출력으로 종료 코드를 정해 셸 스크립트가 결과를 검사하게 합니다.
필터 안에서 읽는 환경 변수의 값.