본문 바로가기
C.W.K.
Stream
Lesson 05 of 08 · published

jq, yq, dasel: 구조화 데이터

~10 min · jq, yq, dasel, json, yaml

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

형식마다 다른 도구 계약

세 도구 모두 구조화 데이터를 조회하고 바꿀 수 있지만 지원 형식과 표현식 문법, in-place 편집 방식은 서로 달라.

  • jq는 JSON을 다루며 가장 널리 배포되어 있어.
  • yq는 YAML을 중심으로 JSON도 다뤄. 같은 이름의 다른 구현이 있으므로 문서와 버전을 확인해야 해.
  • dasel은 JSON, YAML, TOML, XML과 CSV를 하나의 선택 문법으로 다뤄.

JSON에는 jq 사용하기

jq는 JSON 처리에서 널리 쓰이지만 yq와 dasel의 표현식이 모든 경우에 jq와 같다고 가정하면 안 돼. 복잡한 필터를 옮길 때는 각 도구의 현재 문법을 확인해.

YAML에는 yq 사용하기

brew install yq
yq '.metadata.name' deployment.yaml
yq '.spec.replicas = 5' -i deployment.yaml   # 파일을 제자리에서 수정
yq -o=json '.' config.yaml | jq    # JSON 변환

여러 형식을 다루는 dasel

brew install dasel
dasel -f config.yaml '.database.host'
dasel -f Cargo.toml '.package.version'
dasel -f data.csv '.[0].name'
dasel -f doc.xml '.root.item.name'

여러 구조화 파일 형식을 같은 선택 문법으로 조회하고 싶을 때 사용할 수 있어.

입력 형식에 맞춰 고르기

  • JSON만 다룬다면 널리 설치되어 있고 문서가 많은 jq가 잘 맞아.
  • YAML이 중심이라면 현재 설치한 구현의 문법을 확인한 뒤 yq를 사용해.
  • 한 스크립트에서 여러 파일 형식을 같은 문법으로 조회하려면 dasel을 검토해.

같은 YAML도 다시 쓰면 모양이 달라질 수 있어

파일을 제자리에서 고치는 작업은 값만 바꾸는 것처럼 보여도 주석, 앵커, 키 순서, 따옴표 스타일을 다시 직렬화할 수 있어. 먼저 표준 출력으로 결과를 만들고 diff를 확인한 뒤 원본에 반영해. 생성 도구가 보존하지 못하는 문서 정보가 있는지도 봐야 해.

도구 이름보다 구현을 확인해

yq처럼 서로 다른 프로젝트가 같은 실행 파일 이름을 쓰는 경우에는 설치 경로와 --version이 곧 계약이야. 인터넷 예제를 붙여 넣기 전에 현재 구현의 도움말에서 플래그와 표현식 순서를 확인해. ‘명령이 있다’와 ‘그 문법의 명령이다’는 달라.

Code

포맷 섞인 파이프라인·bash
# YAML 필드를 읽어 jq로 변환
yq -o=json '.deployments[]' k8s.yaml \
  | jq '{name: .metadata.name, replicas: .spec.replicas}'
# TOML 파일을 제자리에서 수정
dasel put -t string -f Cargo.toml -v '0.5.0' '.package.version'

External links

Exercise

yq와 dasel을 설치하고 비밀이 없는 시험 YAML에서 필드 하나를 조회해. yq -o=json '.' file | jq로 JSON 변환 결과를 확인하되, 제자리 편집은 사본에서 미리보기와 diff를 본 뒤에만 시험해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.