我有一个包含以下内容的文件:
VERSION = 1.1.1
version = 1.1.1
VERSION = "1.1.1"
VERSION = '1.1.1"
等
我正在尝试使用以下命令来复制版本号:
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中不起作用。
答案 0 :(得分:2)
您不能在-E
中同时使用-P
(ERE)和gnu grep
(perl模式)选项。如果您使用的是gnu grep
,则只需坚持使用-P
并使用此命令即可获取所有版本号:
grep -ioP "version\D*\K(\d+\.[\d,A-Z,a-z]+\.[\d,a-z,A-Z]+)" file
1.1.1
1.1.1
1.1.1
1.1.1
-i
用于忽略大小写匹配。\K
是PCRE指令,用于丢弃先前匹配的信息