使用 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

相關內容