YAML command line parser - yq
- Development/팁, 기타
- 2021. 6. 28.
작성한 YAML 파일이 문제가 없는지 검사해 보려면 어떻게 하면 좋을까? 일단은, 작성한 yml 파일에 문법적으로 결함이 없어야 할 것이다. 그 다음으로는 실제 그 값이 의도한 대로(기록된 대로) 제대로 읽히는지 확인하는 절차가 필요할 것이다.
YAML validation
지난 포스트에서는 YAML을 JSON으로 변환시켜주는 사이트를 활용하여, 내가 작성한 YAML 파일이 제대로 의미 전달이 잘 되었는지 검사하였다면, 이미 작성된 파일들을 하나하나 JSON으로 검사하기도 곤란할 것이다. 이럴 때, 다음의 사이트를 활용하여 문법체크를 해보자.
앞서, 사용했던 YAML 예제는 아래와 같다.
artist:
artist-alias1: &MK
name: Mika
albums:
- Life in Cartoon Motion
- The Boy Who Knew Too Much
- The Origin of Love
- No Place in Heaven
- My Name is Michael Holbrook
artist-alias2: &MJ
name: Michael Jackson
albums:
- Off the Wall
- Thriller
- Bad
- Xcape
- Michael
- Invincible
students:
- name: Mark
major: Math
age: 20
favorites: [*MK, *MJ]
- name: Julie
major: Arts
age: 23
favorites: [*MK]
- name: Tommy
major: Music
age: 25
이 파일을 위의 사이트에 붙여 넣어서 검증하면 다음과 같이 뜬다.
하단에 Valid YAML! 이라고 뜬 것을 확인할 수 있다.
실제 값 추출하기
문법은 패스했다면, 실제 파서를 활용하여 내가 입력한 값이 제대로 추출가능한지도 확인하면 좋을 것이다. 물론, 애플리케이션에서 해도 되지만, 이를 커맨드라인에서 먼저 확인하고 싶을 때 사용할 수 있는 방법이라 보면 된다.
yq 설치하기
yq라는 프로그램을 설치하자. yq는 커맨드라인상에서 YAML/XML 파일을 처리할 수 있는 프로그램이며, jq의 wrapper 라 할 수 있다.
$ brew install yq
OSX에서 위의 명령어로 간단하게 yq를 설치하였다. 내 경우는, 위 명령어로 설치한 후 실행하니 jq도 없다고 하여, jq까지 추가로 설치해 주었다.
$ brew install jq
yq를 실행하면, 프로그램에 대한 간단한 설명이 다음과 같이 출력된다.
Usage:
yq [flags]
yq [command]
Available Commands:
eval Apply expression to each document in each yaml file given in sequence
eval-all Loads _all_ yaml documents of _all_ yaml files and runs expression once
help Help about any command
shell-completion Generate completion script
Flags:
-C, --colors force print with colors
-e, --exit-status set exit status if there are no matches or null or false is returned
-h, --help help for yq
-I, --indent int sets indent level for output (default 2)
-i, --inplace update the yaml file inplace of first yaml file given.
-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 yaml docs from scratch.
-P, --prettyPrint pretty print, shorthand for '... style = ""'
-j, --tojson output as json. Set indent to 0 to print json in one line.
--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
Use "yq [command] --help" for more information about a command.
yq 사용하기
기본적인 사용법은,
$ yq eval [표현식] [yaml파일]
$ yq e [표현식] [yaml파일]
형식이다. 앞서 인용한 yml text를 파일로 저장하고 다음과 같이 테스트 해본다.
- 전체 출력하기
$ yq e test.yml
artist:
artist-alias1: &MK
name: Mika
albums:
- Life in Cartoon Motion
- The Boy Who Knew Too Much
- The Origin of Love
- No Place in Heaven
- My Name is Michael Holbrook
artist-alias2: &MJ
name: Michael Jackson
albums:
- Off the Wall
- Thriller
- Bad
- Xcape
- Michael
- Invincible
students:
- name: Mark
major: Math
age: 20
favorites: [*MK, *MJ]
- name: Julie
major: Arts
age: 23
favorites: [*MK]
- name: Tommy
major: Music
age: 25
- 특정 섹션/값만 출력하기
$ yq e '.artist.artist-alias1' test.yml
&MK
name: Mika
albums:
- Life in Cartoon Motion
- The Boy Who Knew Too Much
- The Origin of Love
- No Place in Heaven
- My Name is Michael Holbrook
$ yq e '.artist.artist-alias1.name' test.yml
Mika
$ yq e '.artist.artist-alias1.albums' test.yml
- Life in Cartoon Motion
- The Boy Who Knew Too Much
- The Origin of Love
- No Place in Heaven
- My Name is Michael Holbrook
- 리스트 엘리먼트 접근하기
$ yq e '.artist.artist-alias1.albums[0]' test.yml
Life in Cartoon Motion
$ yq e '.students[1]' test.yml
name: Julie
major: Arts
age: 23
favorites: [*MK]
- Alias 액세스하기
$ yq e '.students[0].favorites' test.yml
[*MK, *MJ]
$ yq e '.students[0].favorites[0]' test.yml
*MK
$ yq e '.students[0].favorites[0].name' test.yml
Mika
$ yq e '.students[0].favorites[0].albums' test.yml
- Life in Cartoon Motion
- The Boy Who Knew Too Much
- The Origin of Love
- No Place in Heaven
- My Name is Michael Holbrook
위와 같이 yq를 사용하여 특정 값들을 읽어오는 것을 확인하였다. 즉, 애플리케이션내에서도 이와 유사한 방식으로 해당 값들을 읽을 수 있다는 것을 커맨드라인 툴로 손쉽게 검증하였다.
yq로 문법 검증하기
위에서는 yamllint.com으로 온라인 검증을 했다면, yq를 설치하고 yq를 이용하여 문법 검증을 할 수도 있다.
$ yq e 'true' 파일명
실행 결과 특이사항이 없으면, true를 리턴하고 문제가 있으면 에러를 리턴한다.
참고
yq의 기존 버전과 하위 버전의 차이는 아래 사이트를 참조하자.
'Development > 팁, 기타' 카테고리의 다른 글
m4a mp3 변환 방법 3가지 (0) | 2022.01.08 |
---|---|
아이폰/아이패드에서 녹음한 caf 파일을 mp3로 변환하기 (feat 맥북) (0) | 2021.11.25 |
playbook? runbook? (0) | 2021.07.08 |
YAML (YAML Ain't Markup Language) 이해하기 (0) | 2021.06.24 |
디렉토리 이하 특정 문자열/한글 포함여부 찾기 (0) | 2021.03.04 |
gist 사용법 (0) | 2021.02.27 |
MS Word에 소스코드 복사하기 (0) | 2021.01.26 |
태그/워드 클라우드 생성기 (8) | 2020.12.03 |