我知道这个问题已被问过多次,但该解决方案对我不起作用。
我有 2 个文件:1_all 和 2_ovo。它们都包含一个项目列表。 1_all 包含 2_ovo 中的项目以及其他项目。我需要删除 1_all 中与 2_ovo 中相同的所有项目。这就是我所拥有的:
for i in 2_ovo
do
sed -i "/$i/d" 1_all
done
因此,从 2_ovo 中获取值并从 1_all 中删除该值。
我知道 sed 中的变量应该用双引号处理,但该命令根本不执行任何操作。如果我用实际值替换 $i ,该值将按预期从文件中删除。有任何想法吗?
答案1
您需要读取该文件才能执行循环。
for i in `cat /path/to/file/2_ovo`
do
sed -i "/$i/d" 1_all
done
答案2
您可以使用with 选项将文件用作要匹配和反转匹配的文字行列表,而不是从 的sed
每一行开始:2_ovo
grep
-Fxf 2_ovo
-v
grep -vFxf 2_ovo 1_all > 3_only_the_rest