2012-08-31 93 views
0

所以我知道如何尋找的視頻卡的數量,但在Ruby腳本我寫了我有這個小的小方法來確定它:查找號碼

def getNumCards 
    _numGpu = %x{lspci | grep VGA}.split("\n").size 
end 

但已經確定我需要做的是3D電影的搜索,以及VGA,所以我把它改爲:

def getNumCards 
    _numGpu = %x{lspci | grep "VGA\|3D"}.split("\n").size 
end 

但我發現,當我運行第二個它返回0。如果我在命令行上自行運行該命令,它會顯示3個視頻卡(1個VGA卡和2個Tesla NVIDIA卡,它們是3D卡)。我不確定分裂部分發生了什麼,可能會讓事情變得糟糕。

任何幫助將會很棒!

乾杯

回答

3

人的grep:

-E, --extended-regexp 
... 
egrep is the same as grep -E. 

所以,egrep應該幫助

0

我會去這個信息的兩種方式之一了。

的幾乎純粹的命令行版本將是:

def getNumCards 
    `lspci | grep -P '\b(?:VGA|3D)\b' | wc -l`.to_i 
end 

,它可以讓操作系統做幾乎所有的工作,除了最終轉換爲整數。

-P '\b(?:VGA|3D)\b'是一個Perl正則表達式,它表示「找到一個詞斷行,然後查找VGA或3D,然後是另一個分詞」。這將有助於避免由於目標被嵌入其他字符串而導致的任何命中。

越多,紅寶石版本是:

def getNumCards 
    `lspci`.split("\n").grep(/\b(?:VGA|3D)\b/).count 
end 

它做同樣的事情,只有在所有的Ruby。