私はしばしばそれをlshw -json
Linuxホストのシステムデータを抽象化するために使用します。現在のシナリオでは、すでにlshwを介してlshwからネットワークデータを抽出しており、lshw -c network -json
マシンのNICのデータをさらに抽出する必要があります。
私の場所のコピー:
# lshw -c network -json > /var/tmp/network.json
pci@
これで、文字列からバス情報が削除されたネットワークインタフェースのIDと論理名のみをカプセル化するJSON構造が必要です。これは私をかなり近づけます。
# jq '.[] | {id: .logicalname, bus: .businfo | capture("pci@(?<bus>.*)")}' /var/tmp/network.json
{
"id": "eth0",
"bus": {
"bus": "0000:01:00.0"
}
}
{
"id": "eth1",
"bus": {
"bus": "0000:01:00.1"
}
}
{
"id": "eth2",
"bus": {
"bus": "0000:01:00.2"
}
}
{
"id": "eth3",
"bus": {
"bus": "0000:01:00.3"
}
}
明らかに問題は追加bus
キーにありますbus
。次の構造を返す方法でキャプチャがどのように機能するかを知らないようです。
# jq '.[] | {id: .logicalname, bus: .businfo | capture("pci@(?<bus>.*)")}' /var/tmp/network.json
{
"id": "eth0",
"bus": "0000:01:00.0"
}
{
"id": "eth1",
"bus": "0000:01:00.1"
}
{
"id": "eth2",
"bus": "0000:01:00.2"
}
{
"id": "eth3",
"bus": "0000:01:00.3"
}
JQマスターはありますか?そのようなユースケースでは、jqドキュメントが少し不足していることがわかりました。
答え1
これを実装する方法はわかりませんが、capture
次のものを使用できますsub
。
jq '.[] | {id: .logicalname, bus: .businfo | sub("pci@"; "")}' /var/tmp/network.json