我有一个名为$dirs
的变量,用于在目录树中存储目录:
root/animals/rats/mice
root/animals/cats
我有另一个名为$remove
的变量,例如,它保存了我想从dirs变量中删除的目录的名称:
rats
crabs
我正在使用for循环来执行此操作:
for d in $remove; do
dirs=$(echo "$dirs" | sed "/\b$d\b/d")
done
完成循环之后,我应该留下的是:
root/animals/cats
因为循环发现了老鼠。
我已经在3个系统上测试了这种方法,但它只能在2上按预期工作。
是否有一种更通用的方法适用于所有炮弹?
答案 0 :(得分:1)
您正在寻找类似
的内容echo "${dirs}" | grep -Ev "rats|crabs"
如果您不能以|格式存储排除列表,请尝试即时更改:"
echo "${dirs}" | grep -Ev $(echo "${remove}" | tr -s "\n" "|" | sed 's/|$//')
您可以使用excludeFile技术而不使用带
的临时文件echo "${dirs}" | grep -vf <(echo "${remove}")
我不确定哪种解决方案最能得到支持。