什么是最好的方式(在bash中)search一个给定的模式的string,并在不使用awk的情况下回应它? 我想使用像grep
, cat
, cut
或sed
这样的标准命令。
例:
我想从lspci
命令的输出中lspci
所有USB控制器的设备地址:
[artlab@localhost ~]$ lspci 00:00.0 Host bridge: Intel Corporation Core Processor DRAM Controller (rev 18) 00:1a.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05) 00:1c.0 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 (rev 05) 00:1c.4 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 5 (rev 05) 00:1c.5 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 6 (rev 05) 00:1d.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev a5) 00:1f.0 ISA bridge: Intel Corporation 3400 Series Chipset LPC Interface Controller (rev 05) 00:1f.2 RAID bus controller: Intel Corporation 82801 SATA Controller [RAID mode] (rev 05) 00:1f.3 SMBus: Intel Corporation 5 Series/3400 Series Chipset SMBus Controller (rev 05) 02:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection 03:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection 04:03.0 VGA compatible controller: Matrox Graphics, Inc. MGA G200eW WPCM450 (rev 0a)
我想检索(打印出)两个string:
00:1a.0 00:1d.0
我想知道谁会想出更多的可能性。
lspci | grep 'USB Controller' | sed "s/ .*//" lspci | grep 'USB Controller' | grep -o '^[^ ]*' lspci | grep 'USB Controller' | while read id rest ; do echo $id ; done lspci | grep 'USB Controller' | cut -f 1 -d ' '
sed -n '/USB controller/{s/ .*//;p}'
lspci | grep 'USB Controller' | cut -d' ' -f1