Bash 当特定行等于某个值时,awk返回另一行
我正在尝试获取我的一个硬件USB许可证密钥的UUID。 我发现获取UUID的唯一方法是使用virtualbox命令“vboxmanagelist usbhost” 此命令返回以下输出:Bash 当特定行等于某个值时,awk返回另一行,bash,awk,Bash,Awk,我正在尝试获取我的一个硬件USB许可证密钥的UUID。 我发现获取UUID的唯一方法是使用virtualbox命令“vboxmanagelist usbhost” 此命令返回以下输出: UUID: e41fb948-83af-40a8-85a0-b0fcd7afd13f VendorId: 0x0529 (0529) ProductId: 0x0001 (0001) Revision: 2.22 (0222)
UUID: e41fb948-83af-40a8-85a0-b0fcd7afd13f
VendorId: 0x0529 (0529)
ProductId: 0x0001 (0001)
Revision: 2.22 (0222)
Port: 3
USB version/speed: 2/1
Manufacturer: AKS
Product: HASP HL 2.16
Address: sysfs:/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4//device:/dev/vboxusb/001/004
Current State: Available
UUID: 7d8a98ab-e20c-4111-a873-6ce519729ed8
VendorId: 0x0529 (0529)
ProductId: 0x0001 (0001)
Revision: 3.37 (0337)
Port: 2
USB version/speed: 2/1
Manufacturer: AKS
Product: HASP HL 3.25
Address: sysfs:/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.3//device:/dev/vboxusb/001/003
Current State: Captured
我想做的是创建一个bash函数,它接受一个表示Product:string(HASP HL 3.25等)的参数,并在第一行返回UUID
我可以从脚本中获得命令的输出,但是当产品对应于字符串时,我有点不知道如何使用awk来获取UUID
UUIDS=`sudo -u syderal VBoxManage list usbhost | awk '/$1/ { print $2 }'`
我可以使用awk很容易地找到Product:或UUID:行,但如何才能在Product:行等于字符串时返回UUID行?您可以使用类似于:
sudo -u syderal VBoxManage list usbhost |
awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2}
/^Product:/ && $0 ~ product {print uuid}'
它将产品值作为变量product
(请参见我们需要-v
将外壳值作为变量传递到awk
)。然后,它将UUID存储在变量UUID
中,以便以后使用。每当找到UUID:
时,它就会不断变化,因此在给定的段落中,您总是有正确的值。最后,当找到Product:
文本并且该行包含给定的Product
变量时
试验
如果我将您的输出存储在文件a
:
$ awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2} /^Product:/ && $0 ~ product {print uuid}' a
7d8a98ab-e20c-4111-a873-6ce519729ed8
您可以使用以下内容:
sudo -u syderal VBoxManage list usbhost |
awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2}
/^Product:/ && $0 ~ product {print uuid}'
它将产品值作为变量product
(请参见我们需要-v
将外壳值作为变量传递到awk
)。然后,它将UUID存储在变量UUID
中,以便以后使用。每当找到UUID:
时,它就会不断变化,因此在给定的段落中,您总是有正确的值。最后,当找到Product:
文本并且该行包含给定的Product
变量时
试验
如果我将您的输出存储在文件a
:
$ awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2} /^Product:/ && $0 ~ product {print uuid}' a
7d8a98ab-e20c-4111-a873-6ce519729ed8
您可以使用以下内容:
sudo -u syderal VBoxManage list usbhost |
awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2}
/^Product:/ && $0 ~ product {print uuid}'
它将产品值作为变量product
(请参见我们需要-v
将外壳值作为变量传递到awk
)。然后,它将UUID存储在变量UUID
中,以便以后使用。每当找到UUID:
时,它就会不断变化,因此在给定的段落中,您总是有正确的值。最后,当找到Product:
文本并且该行包含给定的Product
变量时
试验
如果我将您的输出存储在文件a
:
$ awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2} /^Product:/ && $0 ~ product {print uuid}' a
7d8a98ab-e20c-4111-a873-6ce519729ed8
您可以使用以下内容:
sudo -u syderal VBoxManage list usbhost |
awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2}
/^Product:/ && $0 ~ product {print uuid}'
它将产品值作为变量product
(请参见我们需要-v
将外壳值作为变量传递到awk
)。然后,它将UUID存储在变量UUID
中,以便以后使用。每当找到UUID:
时,它就会不断变化,因此在给定的段落中,您总是有正确的值。最后,当找到Product:
文本并且该行包含给定的Product
变量时
试验
如果我将您的输出存储在文件a
:
$ awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2} /^Product:/ && $0 ~ product {print uuid}' a
7d8a98ab-e20c-4111-a873-6ce519729ed8