我知道有很多使用 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