JSONファイルがあります。
...
...
"dependencies": {
// more lines
},
"exports": {
"./package.json": "./package.json",
"./.DS_Store": "./.DS_Store",
"./accordions/AccordionDefault.svelte": "./accordions/AccordionDefault.svelte",
".": "./index.js",
"./modals/modalStores": "./modals/modalStores.js",
// more lines
"./tabs/DefaultTabs.svelte": "./tabs/DefaultTabs.svelte",
"./tabs/InteractiveTabs.svelte": "./tabs/InteractiveTabs.svelte",
"./tabs/PillTabs.svelte": "./tabs/PillTabs.svelte"
},
"svelte": "./index.js"
}
以下を使用してすべてのエクスポートを抽出できますjq
。
cat './node_modules/module_name/package.json'| jq '.exports'
{
"./package.json": "./package.json",
"./.DS_Store": "./.DS_Store",
"./accordions/AccordionDefault.svelte": "./accordions/AccordionDefault.svelte",
"./accordions/AccordionItem.svelte": "./accordions/AccordionItem.svelte",
"./alerts/Alert.svelte": "./alerts/Alert.svelte",
...
}
ファイルサイズを減らすために、ファイル名とファイルパス(最初の2行を無視)を抽出したいと思います。
// using my_command ls to overwrite the output to my_file
my_command ls
// outputting the my_file
cat my_file
AccordionDefault ./accordions/AccordionDefault.svelte
AccordionItem ./accordions/AccordionItem.svelte
...
Shell / Bashスクリプトをどのように使用しますか?
ベストアンサー1
「ファイル名」がオブジェクトに適用されるbasename NAME EXT
キーのようなものを意味すると仮定しますexports
。
$ jq -r '.exports | to_entries[] |
{ name: ((.key / "/")[-1] / ".svelte")[0], path: .value } | [ .name, .path ] | @tsv
' ./node_modules/module_name/package.json
package.json ./package.json
.DS_Store ./.DS_Store
AccordionDefault ./accordions/AccordionDefault.svelte
DefaultTabs ./tabs/DefaultTabs.svelte
InteractiveTabs ./tabs/InteractiveTabs.svelte
PillTabs ./tabs/PillTabs.svelte
これは、文字列 "division"を使用してキーを分割して/
から再分割します(.svelte
ここでjqsplit
関数を使用することもできます)。
「最初の2つ」エントリをスキップするには、-to_entries[]
に置き換えto_entries[2:][]
ます。しかし、私が知っている限り、JSONオブジェクトのKey-Valueペアは実際には順序付けされていないため、他の基準に基づいて項目を選択する方が強力です。のような.key | endswith(".svelte")
:
$ jq -r '.exports | to_entries[] | select(.key | endswith(".svelte")) |
{ name: ((.key / "/")[-1] / ".svelte")[0], path: .value } | [ .name, .path ] | @tsv
' package.json
AccordionDefault ./accordions/AccordionDefault.svelte
DefaultTabs ./tabs/DefaultTabs.svelte
InteractiveTabs ./tabs/InteractiveTabs.svelte
PillTabs ./tabs/PillTabs.svelte