이 질문을 확장하면 다음과 같습니다.jq: 다른 필드의 제약 조건을 사용하여 json 파일 구문 분석
필드를 선택한 후 "name"
색상을 지정하고 싶습니다 .
{
"checksum": "9e44bb7b76d8c39c45420dd2158a4521",
"roots": {
"bookmark_bar": {
"children": [ {
"children": [ {
"date_added": "13161269379464568",
"id": "2046",
"name": "The title is here",
"sync_transaction_version": "1",
"type": "url",
"url": "https://the_url_is_here"
}, {
한동안 인터넷 검색을 하고 맨페이지를 읽어보니 default 라는 변수를 사용하여 색상을 설정할 jq
수 있는 것 같은데 , 제 환경에는 없어서 수동으로 설정했습니다(기본값이기 때문에 그렇게 하면 안 됩니다 - 어딘가에 하드코딩되어 있음) 명령에 대해 테스트했지만 출력에 색상이 없습니다(출력은 json 객체가 아닌 필드일 뿐임). 색상은 선택한 필드의 색상이 아니라 json 개체의 색상인 것 같습니다.JQ_COLORS
JQ_COLORS=1;30:0;39:0;39:0;39:0;32:1;39:1;39
jq
jq
그래서 선택한 필드에 색상을 설정하는 방법이 있는지 물었습니다 jq
.
편집: 나는 선택하지 -r
않거나 -r
선택 하지 않고 있습니다 jq
: 이 명령을 사용하십시오:
jq -r '.roots.bookmark_bar.children[]|.children[]|["\"\(.name)\"",.url]|@tsv' json_file`
내 예상 결과는 다음과 같습니다
"something here has spaces and inside a double quotes" solid_line_without_space
-r
하지만 옵션을 그대로 두면 다음 명령이 실행됩니다.
jq '.roots.bookmark_bar.children[]|.children[]|["\(.name)",.url]|@tsv' json_file`
결과는 다음과 같습니다. 예상되지 않았으며 \t
확장할 수 없습니다.
"something here has spaces and inside a double quotes"\tsolid_line_without_space
질문 1:결과를 얻는 방법:
"something here has spaces and inside a double quotes" solid_line_without_space
선택의 여지 가 없습니다 -r
. 여기에 색상이 정말 필요합니다.
질문 2: 쿼리에서 두 필드를 필터링하고 있으므로 "name"
필드에만 색상을 유지하고 필드에는 색상을 유지하려면 어떻게 해야 합니까 "url"
? 실제로 각 필드의 색상을 사용자 정의하는 방법까지 확장할 수 있습니다. 수정하려면 JQ_COLORS
)
질문 3:확장 질문: 다음과 같이 다른 필터를 통해 파이프하는 경우 필드 색상을 어떻게 유지합니까 jq <..> | sed <...>
?
질문 4: 구분 기호를 사용자 정의하는 방법은 무엇입니까? 여기에 @tsv
에 대한 기호가 있습니다 . <tab>
- 와 같은 구분 기호가 있으면 어떻게 됩니까?|
space|space
답변1
아직도 정확히 문제가 무엇인지 잘 모르겠습니다. jq
출력 색상을 지정 하는 방법에 관한 내용이라면 다음을 확인하세요 man jq
.
o --color-output / -C and --monochrome-output / -M:
By default, jq outputs colored JSON if writing to a terminal. You can force it to produce color even if
writing to a pipe or a file using -C, and disable color with -M.
따라서 파이프에 쓸 때 터미널에 쓰는 것이 아니므로 색상이 없습니다. 비교해서 테스트해보세요
echo '{"foo":"bar"}' | jq .
echo '{"foo":"bar"}' | jq . | cat
다음을 추가하여 음영 처리를 다시 켤 수 있습니다 -C
.
echo '{"foo":"bar"}' | jq -C . | cat
JSON 값의 색상을 흉내내는 등 좀 더 어려운 작업을 수행하고 싶지만 jq
JSON 필드 이름이나 개체의 특정 부분에만 사용하고 싶지 않은 경우 질문을 업데이트하세요.
색상 지정은 출력에 이스케이프 코드를 추가하는 것으로만 구성됩니다. 여러 가지 방법으로 이를 흉내낼 수 있습니다.
답변2
~에서JQ 문서:
대체 색상을 구성하려면
JQ_COLORS
환경 변수를 콜론으로 구분된 부분 터미널 이스케이프 시퀀스 목록(예"1;31"
: 다음 순서)으로 설정하기만 하면 됩니다.
- Null 값의 색상
- 가짜 색상
- 트루 컬러
- 숫자의 색깔
- 문자열 색상
- 배열 색상
- 물체의 색상
이는 변경할 수 있는 유일한 구성 요소이며 목록의 각 항목에는 하나의 설정만 있습니다. 개별 멤버 선택 및 선택을 사용할 수 없으므로 JQ_COLORS
모든 문자열이 동일한 방식으로 처리됩니다.
출력이 더 이상 JSON 형식이 아니므로 계속할 필요가 없습니다 jq
. 이를 다른 명령에 전달하여 올바른 터미널 이스케이프 시퀀스를 추가할 수 있습니다. 예를 들어 참조하십시오.쉘 스크립트에 "친숙한" 터미널 색상 이름이 있습니까?