jq: json 파일의 선택된 필드 색상화 [닫기]

jq: json 파일의 선택된 필드 색상화 [닫기]

이 질문을 확장하면 다음과 같습니다.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_COLORSJQ_COLORS=1;30:0;39:0;39:0;39:0;32:1;39:1;39jqjq

그래서 선택한 필드에 색상을 설정하는 방법이 있는지 물었습니다 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 값의 색상을 흉내내는 등 좀 더 어려운 작업을 수행하고 싶지만 jqJSON 필드 이름이나 개체의 특정 부분에만 사용하고 싶지 않은 경우 질문을 업데이트하세요.

색상 지정은 출력에 이스케이프 코드를 추가하는 것으로만 구성됩니다. 여러 가지 방법으로 이를 흉내낼 수 있습니다.

답변2

~에서JQ 문서:

대체 색상을 구성하려면 JQ_COLORS환경 변수를 콜론으로 구분된 부분 터미널 이스케이프 시퀀스 목록(예 "1;31": 다음 순서)으로 설정하기만 하면 됩니다.

  • Null 값의 색상
  • 가짜 색상
  • 트루 컬러
  • 숫자의 색깔
  • 문자열 색상
  • 배열 색상
  • 물체의 색상

이는 변경할 수 있는 유일한 구성 요소이며 목록의 각 항목에는 하나의 설정만 있습니다. 개별 멤버 선택 및 선택을 사용할 수 없으므로 JQ_COLORS모든 문자열이 동일한 방식으로 처리됩니다.

출력이 더 이상 JSON 형식이 아니므로 계속할 필요가 없습니다 jq. 이를 다른 명령에 전달하여 올바른 터미널 이스케이프 시퀀스를 추가할 수 있습니다. 예를 들어 참조하십시오.쉘 스크립트에 "친숙한" 터미널 색상 이름이 있습니까?

관련 정보