2013-10-18 71 views
0

如果我試圖查找其主機總線連接到硬盤驅動器,我會用分析功能

ls -ld /sys/block/sd*/device 

返回

lrwxrwxrwx 1 root root 0 Oct 18 14:52 /sys/block/sda/device -> ../../../1:0:0:0 

現在,如果我想分析在上面的字符串末尾加上「1」,最快的方法是什麼?

對不起,我對shell腳本很陌生,我無法充分利用這個強大的腳本語言。

謝謝!

回答

2

斯普利特用斜槓,選擇最後一個字段,用冒號分割它,選擇第一個結果:

ls -ld /sys/block/sd*/device | awk -F'/' '{ split($NF, arr, /:/); print arr[1] }' 

它產生:

1 
+0

你能解釋一下「{分裂($ NF,編曲,/:/); print'arr [1]}「? –

+1

是的,非常簡單,'$ NF'是最後一個字段('1:0:0:0'),'arr'是一個數組變量,我訪問第一個。 – Birei

1

試着這樣做:

$ ls -ld /sys/block/sd*/device | grep -oP '\d+(?=:\d+:\d:\d+)' 
0 
2 
3 

$ printf '%s\n' /sys/block/sd*/device | 
    xargs readlink -f | 
    grep -oP '\d+(?=:\d+:\d:\d+)' 

,如果你只想要第一次出現:

grep ...-m1 ...