2012-10-25 71 views
2

在一個字符串中搜索給定模式並在不使用awk的情況下回應它的最佳方式(在bash中)是什麼?我想要使​​用標準命令,如grep,cat,cutsed在bash中搜索並回顯字符串的一部分

實施例:

我想從lspci命令的輸出去掉所有的USB控制器的設備地址:

[[email protected] ~]$ 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) 

我想檢索(打印出)的兩串:

00:1a.0 
00:1d.0 

回答

3

我想知道誰會想出更多的可能性。

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 ' ' 
+0

非常乾淨!謝謝你 –

1
sed -n '/USB controller/{s/ .*//;p}' 
1
lspci | grep 'USB Controller' | cut -d' ' -f1 
相關問題