2012-02-01 76 views
-1

我正在試圖通過使用system_profiler命令使用OSX終端來找到我的硬盤的名稱。我將輸出發送到一個文本文件。下面是輸出的一部分...grep之後的grep - OSX Shell腳本

Serial-ATA: 

    Intel ICH8-M AHCI: 

      Vendor: Intel 
      Product: ICH8-M AHCI 
      Link Speed: 1.5 Gigabit 
      Negotiated Link Speed: 1.5 Gigabit 
      Description: AHCI Version 1.10 Supported 

      FUJITSU MHY2160BH: 

       Capacity: 160.04 G 

我後面的部分是FUJITSU MHY2160BH:,所以我想給grep,與16位的Serial-ATA:之後開始的第一道防線。由於system_profiler的輸出具有可變數量的行,因此我並不想使用grep -A

我試過greps,awks和seds的所有方式但無濟於事。

有什麼想法? 乾杯。

回答

3

這是更容易,速度更快,以確定使用diskutilsystem_profiler

diskutil info /dev/disk0 | grep 'Media Name:' | cut -f2 -d: 

更多的思考:

system_profiler是昂貴的。您通常應該只收集您關心的數據類型。例如:

system_profiler SPSerialATADataType SPPrintersDataType 

運行一些小命令通常比運行速度更快一個巨大的system_profiler(〜700K我的系統上),然後反覆grepping它(這需要重新讀取整個文件幾次)。運行較小的命令可以完全避免昂貴的數據類型(如SPApplicationsDataType)。如果您知道您只查看SATA信息,那麼grep會更容易。

雖然,我仍然使用diskutil來獲取這個特定的信息。這很可能會更快更輕鬆(至少大部分時間),並且可以讓您獲得正確的驅動。這兩種技術都在假設你想要什麼驅動。您的方法尋找第一個SATA驅動器。我的方法查看disk0。正確的方法通常是查看引導驅動器(/)。你可以很容易地確定這再次使用diskutil

diskutil info `diskutil list/| head -1` | grep 'Media Name:' | cut -f2 -d: 
+0

乾杯羅布。我可能是你最好的方式;正如你所說我保證得到disk0。 (儘管如此,仍然不能投票這個答案!) – Adam 2012-02-01 16:47:34

0

Piple輸出到這一點:

awk '/^    /{print $1, $2; exit; }' 
2
system_profiler | 
awk ' 
    /Serial ATA/ { flag = 1 } 
    flag && /^    [^ ]/ {print; exit} 
' 
+1

'system_profiler SPSerialATADataType'消除了對標誌的需要。 – ghoti 2012-02-01 16:25:22

0

的system_profiler命令也可以限制其輸出到單個類別:

$ system_profiler SPSerialATADataType | grep Model: | head -1 
      Model: FUJITSU MHZ2120BH G1      
$ 

但我與Rob納皮爾同意,diskutil是更好的選擇這個。

$ diskutil info -plist /dev/disk0 | awk '/<key>MediaName<\/key>/{getline;gsub(/<[^>]+>/,"");print;exit;}' 
     FUJITSU MHZ2120BH G1 Media