我正在運行dmesg,其中包含有關連接到計算機的設備和驅動器的信息。 IDE驅動器顯示爲「hd」,後面跟着一個以「a」開頭的字母。我需要使用grep命令來查找包含hd或sd後跟一個字母的內容。Dmesg命令管道它grep
我知道這是沿線的:
dmesg | grep ...但我無法爲它編寫正則表達式。我怎麼做?
我正在運行dmesg,其中包含有關連接到計算機的設備和驅動器的信息。 IDE驅動器顯示爲「hd」,後面跟着一個以「a」開頭的字母。我需要使用grep命令來查找包含hd或sd後跟一個字母的內容。Dmesg命令管道它grep
我知道這是沿線的:
dmesg | grep ...但我無法爲它編寫正則表達式。我怎麼做?
嘗試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的這裏...
通過@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]'
'[H | S]'是錯誤的,它應該是'[HS]'(或'(H | S)') – neuhaus
謝謝,編輯。 – mikeb
您應該使用POSIX字符類'[[:lower:]]'而不是'[az]',因爲在某些語言環境中'az'可以包含大寫字母(例如'az'可以表示'aAbBcC ... z' –