在域部分中搜索关键字的URLS列表

时间:2010-12-04 22:11:36

标签: regex linux grep

我在文件中有一个大的列表(数百万)URL(每行一个),如下所示:

http://someDomain.com/articlex=123&b=23

http://KEYWORDindomain.net/blahblah 

http://anotherKEYWORDindomain.org/blahblah/blip/q=123 

http://blabkkk.org/KEYWORD/blip/q=123

 (etc)

我想在网址中打印出某个关键字出现在中的所有网址。

离。

grep <regex>KEYWORD<regex> file

output
======
http://KEYWORDindomain.net/blahblah
http://anotherKEYWORDindomain.org/blahblah/blip/q=123

我认为这应该很容易,但很难弄清楚正则表达式。也许我需要管道几个命令来实现我想要的结果?

我最接近的是:grep“http://.* \?/”

任何人都有使用shell命令的好方法吗?

2 个答案:

答案 0 :(得分:0)

尝试

\b(https?|ftp|file)://[^/\s]*KEYWORD[^/\s]*(?:/[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$])?

这将匹配第一个斜杠之前的部分中包含KEYWORD的URL(如果有)。

答案 1 :(得分:0)

符合条件的最简单的表达式就是这个(你相信任何有http://的东西都是URL的起点,可能并不总是如此,但是......):

grep 'http://[^/]*KEYWORD'

如果您希望获得更多网址前缀,请尝试以下方法:

grep '\<[a-z]*://[^/]*KEYWORD'

[^ /] *是键,它表示'除了/,零发生或任意次数之外的任何字符'。

如果您知道需要排序的文件每行列出一个URL,并且该URL从该行的开头开始,那么您可以保护自己形成不太可能但可能是虚假的http://在中间符合以下内容:

grep '^http://[^/]*KEYWORD'

就像Tim建议的那样,如果你有理由认为你的URL列表可能包含空格(我更喜欢列出空格和制表符的旧方法),你也可以随时保留空格:

grep '^http://[^/ \t]*KEYWORD'

希望这有帮助。