如何使用EGREP搜索行中第一次出现的模式

时间:2014-04-25 08:44:49

标签: regex linux grep

我正在使用EGREP正则表达式搜索包含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之后会发生什么,我想修剪它。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您需要一个lazy quantifier,为此你需要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

egrep -io '^https?://home\.[^/]+\.gov(\.au|\.uk)?' input.txt

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

答案 1 :(得分:1)

你可以这样做:

^\<https?://home\.\w+\.gov(\.au|\.uk)?