回答:
grep -Fxf list -v /etc/remotedomains > remotedomains.new
mv remotedomains.new /etc/remotedomains
-vパターンに一致していないだけで、出力ラインにgrepを伝えます。
-f listファイルからパターンを読み取るためにgrepを伝えますlist。
-F(あなたは正規表現のメタ文字でトラブルに実行されませんので)、プレーン文字列ではなく、正規表現としてパターンを解釈するためにはgrepに指示します。
-xパターンがあるかどう、例えば行全体を一致させるためにはgrep告げるfooだけの行削除する必要fooはなく、行foobarまたはbarfoo。
sed -r -i -e '/^(domain1|domain2|domain3|...|domainN)$/d' domainlist.txt
削除するドメインのリストがファイルにある場合:
sed -r -i -e '/^'"$(xargs <removelist.txt|sed -e 's/ /|/g)"')$/d' domainlist.txt
ノート:
-i.bakを使用して、sedにdomainlist.txtのバックアップを作成させます。
removelist.txtがある場合は、多くのエントリの数千人を、それが最大のコマンドラインの長さをオーバーフローする可能性があります。これは非常にありそうなシナリオではありませんが、注意する必要があります。
さらに考察すると、そのリスクは次のようにして取り除くことができます。
for RE in $(xargs <removelist.txt|sed -e 's/ /|/g') ; \
do sed -r -i -e '/^('"$RE"')$/d' domainlist.txt ; \
done
/etc/localdomains、必ずバックアップをとってください/etc/remotedomains。