【发布时间】:2019-11-25 14:56:30
【问题描述】:
我有一个包含以下内容的文件:
VERSION = 1.1.1
version = 1.1.1
VERSION = "1.1.1"
VERSION = '1.1.1"
等
我正在尝试使用 grep 获取版本号:
grep -E "(VERSION|version|Version)[^0-9]*([0-9]+\.[0-9,A-Z,a-z]+\.[0-9,a-z,A-Z]+)" -oP setup.py
这抱怨“指定的匹配器冲突”。大概是因为有两个捕获组。我试图使第一组不捕获:(?:VERSION|version|Version),但这会产生相同的错误。在 regex101 (https://regex101.com/r/21Pkp2/1) 上测试时,具有非捕获组的版本确实有效,所以我不确定为什么它在 grep 中不起作用。
【问题讨论】:
-
你不能同时使用
E(ERE) 和-P(perl 模式) -
哦,删除 -E 不再出错,而是打印整行,而不仅仅是捕获组
-
你可以使用:
grep -ioP "version\D*\K(\d+\.[\d,A-Z,a-z]+\.[\d,a-z,A-Z]+)" file