gpt4 book ai didi

regex - Bash grep 正则表达式

转载 作者:行者123 更新时间:2023-12-05 02:15:09 24 4
gpt4 key购买 nike

我从我的文件中提取了以下字符串 __version__ = '10.11.12'

版本也可以是0.1.2的格式甚至 100.20.30

我有以下 bash 命令,但我目前的问题是我只在每个数字中获取一个值 MODULE_VERSION=$(cat <%= project %>/__init__.py | grep -o '[0-9].[0-9].[0-9]')

我想修改grep正则表达式来抓取版本的所有数值。

最佳答案

您当前的正则表达式“[0-9].[0-9].[0-9]”会出现误报和漏报。这 '。'保留字符表示任何字符,因此您必须使用反斜杠将其转义以使其仅匹配字符“。”此外,'[0-9]' 只会匹配出现一次的数字。您的正则表达式将匹配在位置 1、3 和 5 处有数字的任意 5 个字符。

误报示例:
1a2b3

假阴性示例:
100.20.30

使用 grep,您可以计算一个字符的出现次数。有关详细信息,请参阅 grep 手册页。如果您尝试匹配您给出的示例 (XX.XX.XX | X.X.X | XXX.XX.XX) 以下正则表达式将匹配所有实例并且仅匹配该模式之后的实例。缺点是它很长(可能有更好的写法,如果你知道的话请编辑)。

grep -o -E '([0-9]{3}\.[0-9]{2}\.[0-9]{2})|([0-9]\.[0-9]\.[0-9])|([0-9]{2}\.[0-9]{2}\.[0-9]{2})' 

如果您不太担心误报,您可以将其简化为:

grep -E -o '[0-9]{1,3}\.[0-9]{1,2}\.[0-9]{1,2}'

这将匹配您未指定的一些实例。

误报示例
1.12.12
123.1.1
12.1.12
不胜枚举……

正如评论中所说,gnu grep 将匹配所有出现的地方。 (我已经用 GNU grep 2.20 测试了这些正则表达式)

关于regex - Bash grep 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52335937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com