我使用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的解决方案。

08-07 00:04