dasel v3 문법 레퍼런스은(는) 무엇을 하나요?
구조화된 데이터를 조회, 수정, 변환하기 위한 단일 바이너리 CLI. jq + yq + xmllint를 대체하며, 모든 포맷에 대해 통일된 쿼리 문법을 제공합니다.
작성 시점 안정 버전 (날짜: 2026-02-23): v3.2.3
지원 포맷
json, yaml, toml, xml, csv, hcl, ini
기본 사용법
# stdin으로부터 조회 (포맷 필수)
echo '{"foo": "bar"}' | dasel -i json 'foo'
# 파일에서 stdin으로 전달하여 조회
cat config.yaml | dasel -i yaml 'database.host'
# 수정 후 전체 문서 출력
echo '{"port": 3000}' | dasel -i json --root 'server.port = 8080'
# 포맷 변환
cat data.json | dasel -i json -o yaml
포맷 처리
dasel v3는 파일 확장자로 포맷을 자동 감지하지 않습니다. -f/--file 플래그가 없습니다. 입력은 항상 stdin에서 읽습니다. 포맷은 -i 및/또는 -o로 명시적으로 지정해야 합니다. 하나만 주어지면 다른 하나는 기본값으로 동일한 포맷이 사용됩니다. 둘 다 주어지지 않으면 기본값은 json입니다 (~/dasel.yaml에서 default_format 키로 설정 가능).
출처: internal/cli/query.go:10-11, internal/cli/run.go:37-43, internal/cli/config.go:19-21
주요 플래그
-i, --in <format> 입력 파서 (json, yaml, toml, xml, csv, hcl, ini)
-o, --out <format> 출력 파서 (기본값: 입력 포맷)
--root 수정 후 전체 문서 출력
--var <name>=<value> 쿼리에 변수 전달 (반복 가능)
--compact 간결한 출력 (예쁘게 출력하지 않음)
--rw-flag <name>=<value> 읽기/쓰기 플래그 (예: --rw-flag csv-delimiter=;)
--read-flag <name>=<val> 읽기 전용 플래그 (예: --read-flag xml-mode=structured)
--write-flag <name>=<val> 쓰기 전용 플래그 (예: --write-flag csv-delimiter=;)
-c, --config <path> 설정 파일 경로 (기본값: ~/dasel.yaml)
핵심 셀렉터 빠른 참조
| 셀렉터 | 문법 | 예제 |
|---|---|---|
| 점 표기법 | foo.bar.baz | cat f.json | dasel -i json 'foo.bar' |
| 배열 인덱스 | [0], [2] | cat f.json | dasel -i json 'items[0]' |
| 배열 슬라이스 | [0:3] | cat f.json | dasel -i json 'items[0:2]' |
| 재귀 탐색 | .., ..name | cat f.json | dasel -i json '..name' |
| 모든 값 재귀 | ..* | cat f.json | dasel -i json '..*' |
| 객체 생성 | { key1, key2 } | cat f.json | dasel -i json '{ name, age }' |
| 스프레드 | obj... | cat f.json | dasel -i json '{ defaults..., overrides... }' |
주요 함수 빠른 참조
DefaultFuncCollection에 19개의 내장 함수 (출처: execution/func.go:12-33)와 sortBy 복합 표현식이 있습니다.
| 함수 | 용도 | 예제 |
|---|---|---|
filter(pred) | 배열 필터링 | users.filter(active == true) |
map(expr) | 배열 변환 | users.map(name) |
each(expr) | 각 요소 수정 | each($this = $this * 2) |
search(pred) | 재귀 검색 | search(has("id")) |
sortBy(expr) | 배열 정렬 | sortBy($this, desc) |
has(key) | 키 존재 확인 | has("name") |
get(key) | 키/인덱스 값 가져오기 | get("name") |
contains(val) | 값 포함 여부 확인 | contains(42) |
len(expr) | 길이 | len($this) |
join(sep) | 문자열 결합 | join(",") |
sum(expr) | 숫자 배열 합계 | sum($this) |
add(args...) | 숫자 더하기 | add(1, 2, 3) |
max(args...) | 최대값 | max(1, 5, 3) |
min(args...) | 최소값 | min(1, 5, 3) |
merge(args...) | 맵 병합 | merge(defaults, overrides) |
keys(expr) | 맵 키 가져오기 | keys($this) |
reverse(expr) | 배열 뒤집기 | reverse($this) |
typeOf(expr) | 타입 문자열 가져오기 | typeOf($this) |
toString(expr) | 문자열로 변환 | toString($this) |
toInt(expr) | 정수로 변환 | toInt($this) |
toFloat(expr) | 실수로 변환 | toFloat($this) |
base64e(str) | Base64 인코딩 | base64e("hello") |
base64d(str) | Base64 디코딩 | base64d("aGVsbG8=") |
parse(fmt, data) | 런타임에 데이터 파싱 | parse("json", rawStr) |
readFile(path) | 파일 내용 읽기 | readFile("config.json") |
ignore() | 브랜치에서 제외 | ignore() |
수정 문법
v3에서 put과 delete 서브명령어가 제거되었습니다. --root와 함께 할당을 사용하세요:
# 값 설정
echo '{"count": 1}' | dasel -i json --root 'count = 42'
# 불리언 할당
echo '{"enabled": false}' | dasel -i json --root 'enabled = true'
# 배열에 추가
echo '[1,2,3]' | dasel -i json --root '[$this..., 4]'
# 키 제거 (재구성하여 빼기)
echo '{"keep": "yes", "drop": "no"}' | dasel -i json --root '{ keep }'
포맷 변환
# JSON을 YAML로
cat data.json | dasel -i json -o yaml
# YAML을 TOML로
cat config.yaml | dasel -i yaml -o toml
# TOML을 JSON으로
cat config.toml | dasel -i toml -o json
특수 변수
$root-- 루트 문서를 참조합니다$this-- 현재 노드를 참조합니다 (each,map,filter,search내부에서 사용)
변수 할당
# 세미콜론으로 여러 문장 연결
cat data.json | dasel -i json '$active = users.filter(active == true); $active.map(name)'
조건문
echo '{"count": 7}' | dasel -i json 'if(count > 5) { "many" } else { "few" }'
v3의 v2 호환성 깨짐 변경 사항
put과delete서브명령어 제거됨; 인라인 할당과--root사용-f/--file플래그 제거됨; 입력은 항상 파이프를 통해 stdin에서 전달- 쿼리/셀렉터 문법 완전히 개편됨; v2 문법은 v3와 호환되지 않음
- CLI 프레임워크가 Cobra에서 Kong으로 변경됨
- Go 모듈 경로가
github.com/tomwright/dasel/v3로 변경됨
상세 레퍼런스
- 셀렉터와 문법 -- 점 표기법, 배열, 재귀 탐색, 객체 생성, 변수, 조건문, 비교 연산자
- 함수 레퍼런스 -- 완전한 함수 시그니처, 설명 및 예제
- 포맷별 패턴 -- JSON, YAML, TOML, XML, CSV, HCL, INI 패턴 및 변환 시 주의사항
출처
- dasel README: https://raw.githubusercontent.com/TomWright/dasel/master/README.md (2026-02-19 가져옴)
- dasel 문서: https://daseldocs.tomwright.me (2026-02-19 가져옴)
- 쿼리 문법: https://daseldocs.tomwright.me/syntax/query-syntax.md (2026-02-19 가져옴)
- 함수 인덱스: https://daseldocs.tomwright.me/functions (2026-02-19 가져옴)
- CHANGELOG: https://raw.githubusercontent.com/TomWright/dasel/master/CHANGELOG.md (2026-02-19 가져옴)
- 릴리스: https://github.com/TomWright/dasel/releases (2026-02-19 가져옴)
- 소스 코드 분석:
execution/func.go,internal/cli/query.go,internal/cli/run.go,internal/cli/config.go,execution/execute_binary.go,execution/execute_unary.go(2026-02-19 분석) - 사실 확인: FACT_CHECK_REPORT.md (2026-02-23)