我正在过滤lsblk -r
输出以列出不是 sda的驱动器。我不会列出sdab,sdac等驱动器。
我以前的目的是:
lsblk -r | grep -o '^[a-z]*' | grep -v sda | grep -v sr | sort | uniq
返回了一个不是sda而不是sr的驱动器列表,但是当驱动器名称超出sdz时它会失败,因为grep匹配sdaa for 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
答案 0 :(得分:1)
使用单词边界:
grep -v 'sda\b'
答案 1 :(得分:0)
使用awk
您可以执行纯字符串比较并避免多个grep
命令:
lsblk -r | awk '$1 != "sda" && $1 != "sr" { print $1 }' | sort -u
答案 2 :(得分:0)
在PCRE正则表达式中使用负向前瞻:
grep -P '^sda(?!a)'
答案 3 :(得分:0)
您可以锚定匹配项以搜索确切的字符串:
... | grep -v '^sda$' | grep -v '^sr$' | ...
答案 4 :(得分:0)
你可以在Perl中完成整个事情:
lsblk -r | perl -lne '($d) = /^([a-z]*)/; $h{$d}++ unless $d =~ /^(sda|dr)$/; END { print for sort keys %h }'
答案 5 :(得分:0)
你需要摆脱sda
吧?
sed -n '/sda[^ ]/p'
忽略sda
和sr
,
sed -n '/\(sda[^ ]\|sr\)/p'
给定输入的输出
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
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
答案 6 :(得分:0)
lsblk -r | grep disk | grep -v 'sda ' | grep -v sr | cut -d' ' -f1
它只会过滤来自lsblk -r输出的磁盘条目,然后排除' sda'然后' sr'。如果您先执行sort | uniq
,则无需grep disk
。
示例输入的示例输出:
sdc
sdd
sde
sdf
sdg
sdh
sdi
sdj
sdl
sdab
sdac
sdad
sdaz