这个sed命令更普遍的替代方案?

时间:2016-03-28 00:11:38

标签: shell sed

我有一个名为$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上按预期工作。

是否有一种更通用的方法适用于所有炮弹?

1 个答案:

答案 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}")

我不确定哪种解决方案最能得到支持。