2016-03-28 19 views
0

我有一個名爲$dirs存儲目錄,在目錄樹變量:更通用的替代這個sed命令?

root/animals/rats/mice 
root/animals/cats 

和我有例如稱爲$remove另一個變量保存我想從迪爾斯變量刪除目錄的名稱:

rats 
crabs 

我使用一個for循環來做到這一點:

for d in $remove; do 
dirs=$(echo "$dirs" | sed "/\b$d\b/d") 
done 

該廁所後p完成後,我應該留下的是:

root/animals/cats 

因爲循環發現老鼠。

我已經測試這種方法對3個系統,但它只能在2

按預期工作是否有一個更普遍的是將所有的貝殼工作方法?

+0

我是否理解這個權利:您有兩個列表,並且您想從第一個列表中刪除包含第二個列表中的條目的所有條目? –

+0

這些列表是否必須存儲在變量中,還是以前存在於文件中? –

+1

你堅持要有一個shell腳本嗎?它如何在第三個系統上不起作用? – zdim

回答

1

您正在尋找的東西像

echo "${dirs}" | grep -Ev "rats|crabs" 

當你不能排除列表存儲在具有格式|,試圖改變它的飛行:」

echo "${dirs}" | grep -Ev $(echo "${remove}" | tr -s "\n" "|" | sed 's/|$//') 

你可以使用不含臨時文件的排除文件技術

echo "${dirs}" | grep -vf <(echo "${remove}") 

我不確定哪些解決方案會得到最好的支持。

+0

謝謝,其中一個工作得很好:) – Daeto