Dmesg命令将它管道化为grep

时间:2016-03-01 14:25:05

标签: regex bash unix grep

我正在运行dmesg,其中包含有关连接到计算机的设备和驱动器的信息。 IDE驱动器显示为" hd"接着是一封以" a"开头的信。我需要使用grep命令来查找包含hd或sd后跟字母的内容。

我知道这有点像这样:

dmesg | grep ...但是我在编写正则表达式方面遇到了麻烦。我怎么做?

2 个答案:

答案 0 :(得分: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 ......

  

答案 1 :(得分: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]'
相关问题