Filtern Sie den lsblk-Befehl mit awk oder grep

Filtern Sie den lsblk-Befehl mit awk oder grep

Ich muss das Ergebnis dieses Befehls filtern:

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

Hier ist ein Ergebnis des obigen Befehls auf meinem Computer:

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

Die Filterung, die ich brauche, ist: Nur diejenigen, die NICHT gemountet sind und diejenigen, die ein Dateisystem haben, müssen übrig bleiben. Was also nach der Filterung im Idealfall übrig bleiben sollte, ist:

sdc 15G  ntfs
sdd1 7,5G  ext4

Mein Ziel ist es, ein Skript zu haben (das mit rofi oder dmenu aufgerufen werden kann), um USB-Laufwerke zu mounten. Ich habe im Internet Lösungen gefunden, aber das Problem dabei ist, dass sie davon ausgehen, dass alle Laufwerke partitioniert sind. Wie Sie sehen, verwende ich externe Laufwerke, die ohne vorherige Partitionierung formatiert wurden (z. B. NTFS). Ich brauche also diese Änderung.

Antwort1

Wenn Sie Ihre Anforderung auf eine Liste von Partitionen vereinfachen, die nicht gemountet sind, aber ein Dateisystem enthalten, können Sie dies tun mitawk

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

Der awkFilter berücksichtigt Zeilen, lsblkdie genau drei durch Leerzeichen getrennte Felder haben, und druckt das erste und dritte Feld.

Beispielausgabe

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

Wenn Sie auch die Größe wollen, lassen Sie einfach den Ausgabeselektor weg

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

verwandte Informationen