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' –