簡體   English   中英

如何使用正則表達式從grep輸出中提取完整路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM