我正在过滤lsblk -r输出以列出不是sda的驱动器。我不会列出sdab,sdac等驱动器。

我以前的经历是:

lsblk -r | grep -o '^[a-z]*' | grep -v sda | grep -v sr | sort | uniq


那返回了一个不是sda而不是sr的驱动器列表,但是当驱动器名称超出sdz时失败,因为grep将sdaa匹配为sda并将其清除。

我试图在我的grep模式中包含空白无济于事。

我用于测试的示例(假)lsblk -r输出:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 2,7T 0 disk
sda1 8:1 0 14,9G 0 part [SWAP]
sda2 8:2 0 93,1G 0 part /
sda3 8:3 0 984,6G 0 part /data
sda4 8:4 0 725,4G 0 part /media/backup
sda5 8:5 0 16M 0 part
sda6 8:6 0 498G 0 part /home
sda7 8:7 0 478,5G 0 part
sdc 8:32 1 7,5G 0 disk
sdd 8:48 1 7,5G 0 disk
sde 8:64 1 7,5G 0 disk
sdf 8:80 1 7,5G 0 disk
sdg 8:96 1 7,5G 0 disk
sdh 8:112 1 7,5G 0 disk
sdi 8:128 1 7,5G 0 disk
sdj 8:144 1 7,5G 0 disk
sdl 8:176 1 7,5G 0 disk
sdab 8:144 1 7,5G 0 disk
sdac 8:176 1 7,5G 0 disk
sdad 8:144 1 7,5G 0 disk
sdaz 8:176 1 7,5G 0 disk
sdab1 8:144 1 7,5G 0 part
sdac1 8:176 1 7,5G 0 part
sdad1 8:144 1 7,5G 0 part
sdaz1 8:176 1 7,5G 0 part

最佳答案

使用单词边界:

grep -v 'sda\b'

关于regex - 正则表达式:如何匹配“sda”而不是“sdaa”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45457568/

10-15 08:30