我在文件中有一个大的列表(数百万)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命令的好方法吗?
答案 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'
希望这有帮助。