Regex 如何使用EGREP搜索一行中第一个出现的图案

Regex 如何使用EGREP搜索一行中第一个出现的图案,regex,linux,grep,Regex,Linux,Grep,我使用EGREP regex在包含URL的文件中搜索一些模式。我只想在每行中找到第一个实例。例如,这是我的正则表达式: egrep -io '^\<http(s)://home\>+\..+\.gov(\.au)?' input.txt 但在这个具体的例子中,我真正想要的是: https://home.xxx.gov 我不在乎.gov之后会发生什么,我想删减它。我怎样才能做到这一点呢?您可以这样做: ^\您需要一个,为此您需要Perl风格的正则表达式: egrep -P -io

我使用EGREP regex在包含URL的文件中搜索一些模式。我只想在每行中找到第一个实例。例如,这是我的正则表达式:

egrep -io '^\<http(s)://home\>+\..+\.gov(\.au)?' input.txt
但在这个具体的例子中,我真正想要的是:

https://home.xxx.gov
我不在乎.gov之后会发生什么,我想删减它。我怎样才能做到这一点呢?

您可以这样做:

^\您需要一个,为此您需要Perl风格的正则表达式:

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


限制正则表达式可能匹配的字符范围。另请参见@sshashank124的解决方案。

为什么
(s)
在括号中?它应该是可选的吗?如果是这样,请使用
https?
,而不是
http(s)
@Tim Pietzcker yes我想要可选的“s”。您应该澄清所需的输出。只有
.gov
.gov.au
域是必需的吗?当我使用-P时,在我的ubuntu 12机器中键入命令后,我得到了这个错误:egrep:egrep只能使用egrep模式语法,似乎你的
egrep
是在没有Perl regex支持的情况下编译的。那么,它必须是egrep吗?最后一个命令似乎起作用了。但是,我只是想确定一下。如果我有更多可能的国家代码,比如(.uk或.au或.it),那么我是否正确地将其键入:.gov(\.au\.uk\.it)@user2192774:是的,没错。关于.gov,我也想要这个。你能再澄清一下吗?不正确。我用过。我得到的URL以.com、.net等结尾,而不仅仅是.gov。此外,我得到的URL以home开头,如homeland等。但我想要的是“home”。只有home后跟“.”thnx。但是,如何告诉命令只查找.gov之外的.gov.au和.gov.uk呢?我在帖子中输入it.gov(.au)是否正确。另外,我不想要“/”我只想要.gov端或.gov。au@user2192774,已更新。请告诉我这是否有帮助。你用了“”还是应该是这样?
egrep -io '^https?://home\.[A-Za-z0-9.]+\.gov(\.au|\.uk)?' input.txt
egrep -io '^https?://home\.[^/]+\.gov(\.au|\.uk)?' input.txt