回答:
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
。