正则表达式:如何匹配 "sda"但不匹配 "sdaa"?

标签 regex linux grep

我正在过滤 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'

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

相关文章:

python - GIT 钩子(Hook) -> Python -> Bash : How to read user input?

linux - 如何使 PHP 进程死机时自动重启?

unix - 如何将水平输入更改为垂直输出

linux - tar :cannot stat : No such file or directory when shell script run

bash - 仅从 IP 获取 Mac 地址(bash)

linux - Grep 在 Bash 脚本中没有这样的文件或目录错误,我应该插入等待命令吗?

regex - Sed 正则表达式和特殊字符 (\200 ) 与点不匹配

regex - SQLite 从列中的文本中提取字符串

javascript - 如何在子串之后或两个子串之间查找子串

javascript - php 匹配 javascript 值