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的这里...

+0

'[H | S]'是错误的,它应该是'[HS]'(或'(H | S)') – neuhaus

+0

谢谢,编辑。 – mikeb

+0

您应该使用POSIX字符类'[[:lower:]]'而不是'[az]',因为在某些语言环境中'az'可以包含大写字母(例如'az'可以表示'aAbBcC ... z' –

通过@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]'