отфильтровать команду lsblk с помощью awk или grep

отфильтровать команду lsblk с помощью awk или grep

Мне нужно отфильтровать результат этой команды:

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

Моя цель — иметь скрипт (который можно вызвать с помощью rofi или dmenu) для монтирования 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

Связанный контент