grep使用模式文件的多种模式

时间:2018-10-22 18:53:40

标签: grep

我下载了很多主机列表来屏蔽广告。 问题是某些网站的功能被破坏,例如论坛/讨论和/或图片。所以我想在主机文件中删除一些站点。

假设我要从主机中删除 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命令?

2 个答案:

答案 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

两个都工作正常:-)