grep - 从网址搜索中排除某些域名

时间:2014-07-24 19:23:14

标签: string url grep

data_file.txt包含URL,如:

bunch of data http://good1.com/contact
lines of non-url data
bunch of data http://ok.ip.add.rss/page/1
lines of non-url data
bunch of data http://spammer.com/spammers/are/lame
lines of non-url data
bunch of data http://good2.com/page2
lines of non-url data
bunch of data http://good1.com/contact

有些是好网址,有些是垃圾邮件网址。我正在尝试查找所有垃圾邮件发送者网址。

我可以找到 好的 网址:

grep -n -o -P 'http://(good1.com|ok.ip.add.rss|good2.com).{0,80}' data_file.txt

我想颠倒那个 ,找到好的东西。我试过这些变种:

grep -n -o -P 'http://*(^(good1.com|ok.ip.add.rss|good2.com)).{0,80}' data_file.txt
grep -n -o -P 'http://*^(good1.com|ok.ip.add.rss|good2.com).{0,80}' data_file.txt
grep -n -o -P 'http://*(^good1.com|^ok.ip.add.rss|^good2.com).{0,80}' data_file.txt
grep -n -o -P 'http://*(^good1.com\|^ok.ip.add.rss\|^good2.com).{0,80}' data_file.txt
grep -n -o -P 'http://*(^(good1.com|ok.ip.add.rss|good2.com)).{0,80}' data_file.txt

......但那些没有用。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我能用双grep做到这一点:

grep -n -o -P "http://.*?[^/'\\\\)<]*" data_file.txt | grep -v "http://good1.com\|http://good2.com\|http://ok.ip.add.rss"

我有各种各样的字符 - 除了斜线 - 跟随域名,因此[^/'\\\\)<]