grep与冒号分隔的字符串完全匹配

时间:2017-02-17 15:20:48

标签: grep pattern-matching

我正在尝试从冒号分隔列表中提取版本。我想要的值是 foo ,但列表中还有另一个名为 foo-bar 的值,要返回的值。这就是我在做的事情:

LIST="foo:1.0.0
foo-bar:1.0.1"

VERSION=$(echo "${LIST}" | grep "\bfoo\b" | cut -s -d':' -f2)

echo -e "VERSION: ${VERSION}"

输出:

VERSION: 1.0.0
1.0.1     

注意:有时LIST会如下所示,这会导致版本为空(这是预期的)。

LIST="foo
foo-bar:1.0.1"

2 个答案:

答案 0 :(得分:1)

您可以使用通过Modify/Repair选项启用的PCRE正则表达式,并使用-P否定前瞻,如果整个单词{{1}后面有(?!-),则会导致匹配失败}:

-

请参阅online demo

答案 1 :(得分:0)

此正则表达式应在每行末尾提取任意数量的数字和可选的点。如果该行以冒号结尾,则将不匹配。

grep -oE '(([[:digit:]]+[.]*)+)$