私はこの質問を何度も受けましたが、解決策が私にはうまくいかないことを知っています。
1_allと2_ovoという2つのファイルがあります。彼らはすべてアイテムのリストを含みます。 1_all には 2_ovo のエントリとその他のエントリが含まれます。 2_ovoと同じ1_allのすべてのエントリを削除する必要があります。これが私が持っているものです:
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
sed
withオプションを使用すると、各行から始まる代わりにファイルをリテラル行のリストとして使用して、一致と一致を反転できます。2_ovo
grep
-Fxf 2_ovo
-v
grep -vFxf 2_ovo 1_all > 3_only_the_rest