Answers:
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
。
-F
用于固定字符串匹配(“完全匹配”),但不强制模式匹配整个行。POSIX指定-x
标志以将匹配项限制为模式与整行匹配的实例。
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
做这样的东西了。