我使用egrep regex在包含url的文件中搜索一些模式。我只想在每一行中找到第一个实例。例如,这是我的正则表达式:
egrep -io '^\<http(s)://home\>+\..+\.gov(\.au)?' input.txt
它输出此实例:
https://home.xxx.gov/uuu.aspx?url=https://home.xxx.gov
但我在这个具体例子中真正寻找的是:
https://home.xxx.gov
我不在乎.gov之后会发生什么,我想修剪它。我该怎么做?
最佳答案
您需要一个lazy quantifier,为此您需要perl风格的regex:
egrep -P -io '^https?://home\..+?\.gov(\.au|\.uk)?' input.txt
如果您的
egrep
不支持Perl正则表达式,您需要找到一种不同的方法,例如egrep -io '^https?://home\.[A-Za-z0-9.]+\.gov(\.au|\.uk)?' input.txt
或
egrep -io '^https?://home\.[^/]+\.gov(\.au|\.uk)?' input.txt
限制正则表达式可以匹配的字符范围。另请参见@sshashank124的解决方案。