首页 > 解决方案 > 使用模式文件 grep 多个模式

问题描述

我下载了非常庞大的主机列表来阻止广告。问题是一些网站的功能被破坏了,比如论坛/讨论和/或图片。所以我想删除主机文件中的一些网站。

假设我想从主机中删除a.comb.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 命令呢?

标签: grep

解决方案


如果你有一个 hosts 文件,你想与另一个包含你想删除的条目的文件进行比较,那么使用 uniq 比使用 grep 更容易。

只需合并文件并运行如下内容:

cat hosts badfile badfile | sort | uniq -u > new_hosts

Badfile 被添加两次,因为如果主机中尚不存在条目,它将保留。复制保证消除所有副本。


推荐阅读