Regex
如何使用 sed 從路徑中提取最後兩個(或任意數量)目錄?
我真的在這裡尋找一個通用的解決方案,但為了舉例,假設我正在尋找路徑中最深的2 個目錄。例如:給定路徑
/home/someone/foo/bar
,我如何使用 sed(或 awk)來獲取foo/bar
如果路徑的第一部分始終相同,那將很簡單,但就我而言,我正在尋找一個適用於任何任意路徑的表達式,理想情況下,適用於任何 depth
n
。如果路徑的級別少於
n
(在這種情況下為 2)級別,那麼命令的行為方式並不重要。我今天去做這個,發現它很棘手。我開始編寫一個循環來代替它,但我無法擺脫這種必須在單個命令中實現的感覺。我可能是錯的。有任何想法嗎?
echo "/your/directory/here/bla" | awk -F"/" '{ print "/"$(NF-1)"/"$NF }'
應該可以找到,我沒有嘗試,但是這樣的東西應該可以工作:
find /yourfolder/structure -type d | awk -F"/" '{ print "/"$(NF-1)"/"$NF }'
供參考, $ NF is the latest field found in awk, $ (NF-1),前一個。
在 awk 中,將欄位分隔符更改為斜線:
$ echo /home/someone/foo/bar | awk -F / -v OFS=/ '{ print $(NF-1), $NF }' foo/bar
這會將輸入欄位分隔符和輸出欄位分隔符都設置為斜線,然後列印倒數第二個欄位值、欄位分隔符和最後一個欄位值。
n 值解
$ echo /home/someone/foo/bar | awk -F / -v n=3 ' { o = $NF; for (f=1; f<n; f++) o = $(NF-f) "/" o; print o } ' someone/foo/bar
這使用循環來提取所需數量的目錄。