2016-03-01 188 views
0

我正在運行dmesg,其中包含有關連接到計算機的設備和驅動器的信息。 IDE驅動器顯示爲「hd」,後面跟着一個以「a」開頭的字母。我需要使用grep命令來查找包含hd或sd後跟一個字母的內容。Dmesg命令管道它grep

我知道這是沿線的:

dmesg | grep ...但我無法爲它編寫正則表達式。我怎麼做?

回答

2

嘗試grep '[hs]d[a-z]'

所以,dmesg | grep '[hs]d[a-z]'

編輯

正如下面提到的,你可以做LC_ALL=C ; dmesg | grep '[hs]d[a-z]',以確保您的區域沒有做靠不住的東西與[a-z]

編輯完

如果你想只匹配與開始的事情,使用'^[hs]...'

^行的開頭匹配,所以它會匹配:

hda1是東西

,它不會匹配

我發現hda1的這裏...

+0

'[H | S]'是錯誤的,它應該是'[HS]'(或'(H | S)') – neuhaus

+0

謝謝,編輯。 – mikeb

+0

您應該使用POSIX字符類'[[:lower:]]'而不是'[az]',因爲在某些語言環境中'az'可以包含大寫字母(例如'az'可以表示'aAbBcC ... z' –

0

通過@mikeb答案是很好的,他只是在一個虛假的|他的性格字符類[h|s]這是一個錯誤。

如果你想確保字符串只包含hda,hdb,hdc,sda,sdb,sdc等,之前沒有其他字母,你可以使用「\ b」來匹配字邊界。

dmesg | grep '\b[hs]d[a-z]\b' 

如果你想了解的分區,最後刪除\b\d取代它(對數):

dmesg | grep '\b[hs]d[a-z]\d' 

或只是離開它,那麼它將匹配兩個驅動器和分區:

dmesg | grep '\b[hs]d[a-z]'