この質問を展開すると、次のようになります。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:クエリは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値の色
- 偽の色
- トゥルーカラー
- 数字の色
- 文字列の色
- 配列の色
- オブジェクトの色
これは変更可能な唯一のコンポーネントであり、リスト内の各項目には1つの設定しかありません。個々のメンバーの選択と選択は使用できないため、JQ_COLORS
すべての文字列が同じ方法で処理されます。
出力はJSON形式ではなくなったため、続行する必要はありませんjq
。これを別のコマンドに渡して、正しい端末エスケープシーケンスを追加できます。たとえば、参照してください。シェルスクリプトに「おなじみの」ターミナルカラー名がありますか?