私はサンプルを持っています:
"name": "The title of website",
"sync_transaction_version": "1",
"type": "url",
"url": "https://url_of_website"
次の出力を取得したい。
"The title of website" url_of_website
プロトコルプレフィックスのみが残るように(url_of_website
以前のプレフィックスを除く)、URLからプロトコルプレフィックスを削除する必要があります。http
問題は、私がsed
複数行を読むのに慣れていないことです。調査をすれば私を見つけることができます。https://unix.stackexchange.com/a/337399/256195、まだ結果が得られません。
解析したい有効なjsonオブジェクトは、Bookmark
Google Chromeからのものです。例:
{
"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"
}, {
"date_added": "13161324436994183",
"id": "2047",
"meta_info": {
"last_visited_desktop": "13176472235950821"
},
"name": "The title here",
"sync_transaction_version": "1",
"type": "url",
"url": "https://url_here"
} ]
} ]
}
}
}
ベストアンサー1
これは質問で提供されたJSONドキュメントで機能します。
$ jq -r '.roots.bookmark_bar.children[]|.children[]|["\"\(.name)\"",.url]|@tsv' file.json
"The title is here" https://the_url_is_here
"The title here" https://url_here
これにより、.children[]
各.roots.bookmark_bar.children[]
配列項目の配列にアクセスし、質問に表示される内容に基づいて書式設定された文字列が生成されます(2つのデータの間にタブ文字を含む)。
二重引用符が必要ない場合は、面倒を["\"\(.name)\"",.url]
単に変更するだけです[.name,.url]
。
https://
URLから削除するには:
.url|ltrimstr("https://")
そしてちょうど.url
。