使用 awk 或 grep 过滤 lsblk 命令

使用 awk 或 grep 过滤 lsblk 命令

我需要过滤此命令的结果:

lsblk -rno "name,size,mountpoint,fstype" | grep -v 'sda'

让我在我的计算机上给出上述命令的结果:

sdb 223,6G
sdb1 179,8G /VMs/qemu ext4
sdb2 29,5G [SWAP] swap
sdc 15G  ntfs
sdd 7,5G
sdd1 7,5G  ext4

我需要的过滤是:只有那些没有安装的和那些有文件系统留下的。所以理想情况下过滤后剩下的应该是:

sdc 15G  ntfs
sdd1 7,5G  ext4

我的目标是有一个脚本(可以使用 dmenu 的 rofi 调用)来挂载 USB 驱动器。我在网上找到了一些解决方案,但这些解决方案的问题是它们假设所有驱动器都有分区。如您所见,我使用未首先分区的外部驱动器(例如 ntfs)。所以我需要这个改变。

答案1

如果您将要求简化为未安装但包含文件系统的分区列表,则可以使用awk

lsblk -rno name,size,mountpoint,fstype | awk 'NF==3 {print $1, $3}'

该过滤器考虑包含三个空格分隔字段的awk行,并打印第一个和第三个字段。lsblk

样本输出

lsblk -rno name,size,mountpoint,fstype
mmcblk0 29.8G
mmcblk0p1 63M  vfat
mmcblk0p2 4G / ext4

lsblk -rno name,size,mountpoint,fstype | awk 'NF==3 {print $1, $3}'
mmcblk0p1 vfat

如果您也想要大小,只需省略输出选择器

lsblk -rno name,size,mountpoint,fstype | awk 'NF==3'
mmcblk0p1 63M  vfat

相关内容