형식마다 다른 도구 계약
세 도구 모두 구조화 데이터를 조회하고 바꿀 수 있지만 지원 형식과 표현식 문법, 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이 곧 계약이야. 인터넷 예제를 붙여 넣기 전에 현재 구현의 도움말에서 플래그와 표현식 순서를 확인해. ‘명령이 있다’와 ‘그 문법의 명령이다’는 달라.