Regex 为域部分中的关键字调整URL列表

Regex 为域部分中的关键字调整URL列表,regex,linux,grep,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 '^http://[^/]*KEYWORD'

我在一个文件中有一个很大的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 '^http://[^/]*KEYWORD'
我想打印出在URL的域部分出现某个关键字的所有URL

grep关键字文件
输出
======
http://KEYWORDindomain.net/blahblah
http://anotherKEYWORDindomain.org/blahblah/blip/q=123
我认为这应该很容易grep-able,但很难计算正则表达式。也许我需要通过管道发送几个命令来实现我想要的结果

我得到的最接近的结果是:grep“http://.\?/”

有没有人能用shell命令实现这一点的好方法?

试试看

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

这将匹配一个URL,该URL在第一个斜杠(如果有)之前的部分中包含
关键字

最简单的限定表达式是这样的(您相信任何包含http://的内容都是URL的开始,这可能并不总是正确的,但是……:

如果您想使用更多URL前缀,请尝试以下方法:

grep '\<[a-z]*://[^/]*KEYWORD'
正如Tim所建议的,如果您有理由认为您的URL列表可能包含空格(我更喜欢列出空格和制表符的旧方法),您也可以将空格排除在外:


希望这能有所帮助。

thx对于提示,在使其正常工作时遇到困难,以下是我尝试的内容和遇到的错误:mike@mike-桌面:~$grep“\b(https?| ftp |文件)://[^/\s]*假期[^/\s]*(?:/[-A-Z0-9+&@#/%?=~|$!,.;]*[A-Z0-9+&@#/%=~|$])?“urls.txt bash:,:无法识别的历史修饰符mike@mike-桌面:~$egrep\b(https?| ftp |文件)://[^/\s]*假期[^/\s]*(?:/[-A-Z0-9+&@#/%?=~~|$!:,.;]*[A-Z0-9+&@#/%=~|$])?urls.txt bash:,:使用
--perl regexp
选项的无法识别的历史修饰符try
grep
。另外,我不确定你是否需要加倍反斜杠来逃避它们。
grep '\<[a-z]*://[^/]*KEYWORD'
grep '^http://[^/]*KEYWORD'
grep '^http://[^/ \t]*KEYWORD'