[英]How to extract full paths from grep output using regular expression
我需要自動檢測是否插入了任何USB驅動器,無論是否已安裝,將尚未安裝的USB驅動器安裝在具有給定設備名稱的文件夾中(例如,默認情況下在Windows計算機中會發生),並獲取所有設備的安裝點。 設備應該安裝在/ media / pi的文件夾中(使用Raspberry Pi,所以pi是我的用戶名)。 這就是我在做什么:
要獲取所有安裝程序設備的路徑:
1)運行lsblk
,輸出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 14.4G 0 disk
└─sda1 8:1 1 14.4G 0 part /media/pi/D0B46928B4691270
sdb 8:16 1 14.3G 0 disk
└─sdb1 8:17 1 14.3G 0 part /media/pi/MI PENDRIVE
mmcblk0 179:0 0 14.9G 0 disk
├─mmcblk0p1 179:1 0 41.8M 0 part /boot
└─mmcblk0p2 179:2 0 14.8G 0 part /
2)通過特制的代碼行,我可以過濾掉一些不必要的信息:
我運行lsblk | grep 'sd' | grep 'media'
lsblk | grep 'sd' | grep 'media'
lsblk | grep 'sd' | grep 'media'
輸出:
└─sda1 8:1 1 14.4G 0 part /media/pi/D0B46928B4691270
└─sdb1 8:17 1 14.3G 0 part /media/pi/MI PENDRIVE
我需要以/media/pi/D0B46928B4691270
獲取/media/pi/D0B46928B4691270
和/media/pi/MI PENDRIVE
。 目前,我正在這樣做:
lsblk | grep 'sd' | grep 'media' | cut -d '/' -f 4
但是它僅適用於沒有空格的路徑,並且grep的輸出當然不是數組。 用正則表達式執行此操作的干凈方法是什么?
謝謝。
lsblk
支持帶有-J
標志的json輸出。 我建議如果要解析輸出:
lsblk -J | jq '..|.?|select(.name|startswith("sd")).mountpoint // empty'
像這樣嗎
$ echo "$f"
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 14.4G 0 disk
└─sda1 8:1 1 14.4G 0 part /media/pi/D0B46928B4691270
sdb 8:16 1 14.3G 0 disk
└─sdb1 8:17 1 14.3G 0 part /media/pi/MI PENDRIVE
mmcblk0 179:0 0 14.9G 0 disk
├─mmcblk0p1 179:1 0 41.8M 0 part /boot
└─mmcblk0p2 179:2 0 14.8G 0 part /
$ grep -o '/media/.*$' <<<"$f"
/media/pi/D0B46928B4691270
/media/pi/MI PENDRIVE
$ IFS=$'\n' drives=( $(grep -o '/media/.*$' <<<"$f") )
$ printf '%s\n' "${drives[@]}"
/media/pi/D0B46928B4691270
/media/pi/MI PENDRIVE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.