我下载了很多主机列表来屏蔽广告。 问题是某些网站的功能被破坏,例如论坛/讨论和/或图片。所以我想在主机文件中删除一些站点。
假设我要从主机中删除 a.com 和 b.com 。 这些方法有效。
grep -ve a.com -e b.com hosts > new_hosts
或
egrep -v 'a.com|b.com' hosts > new_hosts
两个都工作正常。但是如果模式增加,我想在文件中写入模式。 如果我使用这个
grep -vf pattern.txt hosts > new_hosts
仅最后一个图案将被删除。 如果 pattern.txt 包含
a.com
b.com
new_hosts仅省略了 b.com , a.com 仍写在new_hosts中。 那么使用模式文件使用什么grep命令?
答案 0 :(得分:0)
如果您有一个hosts文件要与另一个包含要删除的条目的文件进行比较,那么使用uniq比使用grep会容易得多。
只需合并文件并运行类似的内容:
cat hosts badfile badfile | sort | uniq -u > new_hosts
错误文件被添加了两次,因为如果主机中尚不存在某个条目,则它将保留。复制保证所有副本均被消除。
答案 1 :(得分:0)
感谢反馈人员。由于大多数人都怀疑来自 pattern.txt 的错误,因此我怀疑是Windows记事本导致了错误。 Windows记事本中的新行以0D 0A(十六进制)终止。
我在某处读到grep的新行应为0A(十六进制)。 使用 Notepad ++ 编辑pattern.txt之后,此命令终于可以使用:-)
EventLoopGroups
或者也许更好
grep -vf pattern.txt hosts > new_hosts
两个都工作正常:-)