非贪婪 `grep` 的具体情况

非贪婪 `grep` 的具体情况

我知道有很多使用 grep 的非贪婪正则表达式的例子,但我的具体情况遇到了问题。

我的文件包含类似以下内容的行:

[X12345.Yabc.Z7989].[ALPHA/BRAVO].[CHARLIE.DELTA]

我正在尝试解析其中的一部分X12345
即从 开始X直到第一个句点 ( .)的部分

我迄今为止最接近的例子是:

grep -Eo "X(.*?)\."  inputfile

但是这太贪心了(尽管我认为我用得.*?正确)。

有人可以帮我找到一个正确的正则表达式吗?

答案1

您使用.*得当,但正如您所注意到的,它会贪婪地吞噬匹配中尽可能多的字符,因为它.可以匹配任何字符。您可以这样做:

grep -Eo "X([^.]*?)\." inputFile

这将匹配一个 X,后面跟着任意长度的非点 ( [^.]*) 序列,直到某个字符 ( ?) 和一个点 ( \.)。你说你对第一个 X 和第一个 . 之间的所有内容都感兴趣,所以你可以进一步简化它:

grep -Eo "X[^.]*\." inputFile

相关内容