저는 종종 이를 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