가볍고 이식 가능한 명령줄 YAML, JSON 및 XML 프로세서입니다. yq
jq와 유사한 구문을 사용하지만 yaml 파일은 물론 json, xml, 속성, csv 및 tsv에서도 작동합니다. 아직 jq
수행하는 모든 기능을 지원하지는 않지만 가장 일반적인 작업과 기능을 지원하며 계속해서 더 많은 기능이 추가되고 있습니다.
yq는 go로 작성되었습니다. 따라서 귀하의 플랫폼에 맞는 종속성 없는 바이너리를 다운로드할 수 있습니다. 원하는 경우 Docker 및 Podman뿐만 아니라 사용할 수 있는 다양한 패키지 관리자가 아래에 나열되어 있습니다.
값 읽기:
yq '.ab[0].c' 파일.yaml
STDIN의 파이프:
yq '.ab[0].c' < 파일.yaml
yaml 파일을 제자리에 업데이트
yq -i '.ab[0].c = "cool"' file.yaml
환경 변수를 사용하여 업데이트
NAME=mike yq -i '.ab[0].c = strenv(NAME)' file.yaml
여러 파일 병합
# 두 개의 파일을 병합yq -n 'load("file1.yaml") * load("file2.yaml")'# globs를 사용하여 병합:# 모든 파일을 한 번에 평가하기 위해 `ea`를 사용한다는 점에 유의하세요# 응'. $item ireduce ({}; . * $item )' 경로/to/*.yml
yaml 파일에 대한 여러 업데이트
yq -i ' .ab[0].c = "멋져요" | .xyz = "푸바" | .person.name = strenv(NAME)' 파일.yaml
배열에서 항목을 찾아 업데이트합니다.
yq '(.[] | select(.name == "foo") | .address) = "12 cat st"'
JSON을 YAML로 변환
yq - 포이 샘플.json
더 많은 예제는 레시피를 참조하고 자세한 내용은 설명서를 참조하세요.
일반적인 질문과 멋진 아이디어에 대한 토론을 살펴보세요.
wget을 사용하여 gzip으로 압축된 사전 컴파일된 바이너리를 다운로드하세요.
예를 들어 VERSION=v4.2.0 및 BINARY=yq_linux_amd64입니다.
wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY}.tar.gz -O - | tar xz && mv ${BINARY} /usr/bin/yq
wget https://github.com/mikefarah/yq/releases/download/${VERSION}/${BINARY} -O /usr/bin/yq && chmod +x /usr/bin/yq
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && chmod +x /usr/bin/yq
홈브류 사용
brew install yq
snap install yq
yq
스냅에 엄격하게 제한 되어 설치됩니다. 이는 루트 파일에 직접 액세스할 수 없음을 의미합니다. 루트 파일을 읽으려면 다음을 수행할 수 있습니다.
sudo cat /etc/myfile | yq '.a.path'
루트 파일에 쓰려면 스폰지를 사용할 수 있습니다.
sudo cat /etc/myfile | yq '.a.path = "value"' | sudo sponge /etc/myfile
또는 임시 파일에 쓰기:
sudo cat /etc/myfile | yq '.a.path = "value"' | sudo tee /etc/myfile.tmp sudo mv /etc/myfile.tmp /etc/myfile rm /etc/myfile.tmp
docker run --rm -v "${PWD}":/workdir mikefarah/yq [명령] [플래그] [표현식]FILE...
원하는 경우 네트워크 액세스 및 기타 권한 없이 docker에서 yq
실행할 수 있습니다. 즉 --security-opt=no-new-privileges --cap-drop all --network none
입니다.
podman run --rm -v "${PWD}":/workdir mikefarah/yq [명령] [플래그] [표현식]FILE...
-i--interactive
플래그를 docker에 전달해야 합니다.
docker run -i --rm mikefarah/yq '.this.thing' < myfile.yml
podman run -i --rm mikefarah/yq '.this.thing' < myfile.yml
docker run --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
podman run --rm -it -v "${PWD}":/workdir --entrypoint sh mikefarah/yq
전체 docker 명령을 입력하지 않으려면 bash 기능을 사용하는 것이 유용할 수 있습니다.
yq() { docker run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
yq() { podman run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"}
yq
의 컨테이너 이미지는 더 이상 루트(#860)에서 실행되지 않습니다. 컨테이너 이미지에 더 많은 항목을 설치하고 싶거나 파일 읽기/쓰기를 시도할 때 권한 문제가 있는 경우 다음 중 하나를 수행해야 합니다.
docker run --user="root" -it --entrypoint sh mikefarah/yq
podman run --user="root" -it --entrypoint sh mikefarah/yq
또는 Dockerfile에서:
FROM mikefarah/yq USER root RUN apk add --no-cache bash USER yq
기본적으로 yq가 사용하는 알파인 이미지에는 시간대 데이터가 포함되지 않습니다. tz
연산자를 사용하려면 다음 데이터를 포함해야 합니다.
FROM mikefarah/yq USER root RUN apk add --no-cache tzdata USER yq
SELinux와 함께 podman을 사용하는 경우 볼륨 마운트에 공유 볼륨 플래그 :z
를 설정해야 합니다.
-v "${PWD}":/workdir:z
- name: Set foobar to cool uses: mikefarah/yq@master with: cmd: yq -i '.foo.bar = "cool"' 'config.yml' - name: Get an entry with a variable that might contain dots or spaces id: get_username uses: mikefarah/yq@master with: cmd: yq '.all.children.["${{ matrix.ip_address }}"].username' ops/inventories/production.yml - name: Reuse a variable obtained in another step run: echo ${{ steps.get_username.outputs.result }}
자세한 내용은 https://mikefarah.gitbook.io/yq/usage/github-action을 참조하세요.
go install github.com/mikefarah/yq/v4@latest
이는 커뮤니티에서 지원되므로 ❤️ - 그러나 공식적으로 지원되는 릴리스에서는 최신 버전이 아닐 수 있습니다.
Debian 패키지(이전 @rmescandon에서 지원)는 더 이상 유지 관리되지 않습니다. 다른 설치 방법을 사용하십시오.
x-cmd에서 yq
확인하세요: https://x-cmd.com/mod/yq
즉각적인 결과: yq 필터의 출력을 실시간으로 확인하세요.
오류 처리: 구문 오류가 발생했나요? 오류 메시지와 가장 가까운 유효한 필터의 결과가 표시됩니다.
@edwinjhlee 감사합니다!
nix profile install nixpkgs#yq-go
여기를 참조하세요
webi yq
@adithyasunil26에서 지원하는 webi를 참조하세요(https://github.com/webinstall/webi-installers/tree/master/yq)
pacman -S go-yq
초콜릿을 사용하여
choco install yq
@chillum 지원 (https://chocolatey.org/packages/yq)
특종 사용
scoop install main/yq
윙렛 사용
winget install --id MikeFarah.yq
MacPort 사용
sudo port selfupdate sudo port install yq
@herbygillot 지원(https://ports.macports.org/maintainer/github/herbygillot)
Alpine Linux v3.20+(및 Edge):
apk add yq-go
v3.19까지의 Alpine Linux:
apk add yq
Tuan Hoang에서 지원됨(https://pkgs.alpinelinux.org/packages?name=yq-go)
Flox를 사용하면 WSL을 통해 Linux, MacOS 및 Windows에 yq를 설치할 수 있습니다.
flox install yq
많은 예제가 포함된 자세한 문서
휴대용 go로 작성되었으므로 종속성이 없는 멋진 바이너리를 다운로드할 수 있습니다.
jq
와 유사한 구문을 사용하지만 YAML, JSON 및 XML 파일에서 작동합니다.
다중 문서 yaml 파일을 완벽하게 지원합니다.
yaml 머리말 블록 지원(예: jekyll/assemble)
색상화된 yaml 출력
TZ를 사용한 날짜/시간 조작 및 형식 지정
심층적인 데이터 구조
키 정렬
yaml 주석, 스타일, 태그, 앵커 및 별칭을 조작합니다.
현재 위치에서 업데이트
선택하고 업데이트할 복잡한 표현식
업데이트 시 yaml 형식과 주석을 유지합니다(공백 문제가 있지만).
base64 데이터 디코딩/인코딩
다른 파일에서 콘텐츠 로드
json/ndjson으로/에서 변환
xml로/에서 변환
속성으로/에서 변환
csv/tsv로/에서 변환
일반 셸 완성 스크립트(bash/zsh/fish/powershell)
여러 파일을 병합하거나 배열 또는 기타 멋진 항목을 합산하려면 축소하세요.
자동화된 파이프라인에 사용할 Github 작업(@devorbitus에게 감사드립니다)
더 자세하고 고급 사용법에 대해서는 설명서를 확인하세요.
Usage: yq [flags] yq [command] Examples: # yq defaults to 'eval' command if no command is specified. See "yq eval --help" for more examples. yq '.stuff' < myfile.yml # outputs the data at the "stuff" node from "myfile.yml" yq -i '.stuff = "foo"' myfile.yml # update myfile.yml in place Available Commands: completion Generate the autocompletion script for the specified shell eval (default) Apply the expression to each document in each yaml file in sequence eval-all Loads _all_ yaml documents of _all_ yaml files and runs expression once help Help about any command Flags: -C, --colors force print with colors -e, --exit-status set exit status if there are no matches or null or false is returned -f, --front-matter string (extract|process) first input as yaml front-matter. Extract will pull out the yaml content, process will run the expression against the yaml content, leaving the remaining data intact --header-preprocess Slurp any header comments and separators before processing expression. (default true) -h, --help help for yq -I, --indent int sets indent level for output (default 2) -i, --inplace update the file in place of first file given. -p, --input-format string [yaml|y|xml|x] parse format for input. Note that json is a subset of yaml. (default "yaml") -M, --no-colors force print with no colors -N, --no-doc Don't print document separators (---) -n, --null-input Don't read input, simply evaluate the expression given. Useful for creating docs from scratch. -o, --output-format string [yaml|y|json|j|props|p|xml|x] output format type. (default "yaml") -P, --prettyPrint pretty print, shorthand for '... style = ""' -s, --split-exp string print each result (or doc) into a file named (exp). [exp] argument must return a string. You can use $index in the expression as the result counter. --unwrapScalar unwrap scalar, print the value with no quotes, colors or comments (default true) -v, --verbose verbose mode -V, --version Print version information and quit --xml-attribute-prefix string prefix for xml attributes (default "+") --xml-content-name string name for xml content (if no attribute name is present). (default "+content") Use "yq [command] --help" for more information about a command.
yq
가능한 한 주석 위치와 공백을 보존하려고 시도하지만 모든 시나리오를 처리하지는 않습니다(자세한 내용은 https://github.com/go-yaml/yaml/tree/v3 참조).
Powershell에는 yq 인용에 대한 자체 의견이 있습니다.
"yes", "no"는 yq가 가정하는 표준인 yaml 1.2 표준에서 부울 값으로 삭제되었습니다.
보다 일반적인 문제와 해결 방법에 대한 팁과 요령을 참조하세요.