我觉得我太愚蠢了。在我尝试的每种编程语言中,它都可以完美运行,但不能在外壳上使用sed。有人可以向我解释为什么
echo "Version: 4.4.0.157.165" | sed -E 's/.*\Version: (\d+\.\d+.\d+\.\d+)\.\d+//'
再次打印整个字符串,而不是4.4.0.157
。
最好的问候
它适用于regex101: https://regex101.com/r/eZ1gT7/2035
答案 0 :(得分:1)
您需要使用
echo "Version: 4.4.0.157.165" | sed -E 's/.*Version: ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+/\1/'
或者,进一步增强功能:
sed -E 's/.*Version: ([0-9]+(\.[0-9]+){3})\.[0-9]+/\1/' <<< "Version: 4.4.0.157.165"
注意:
\
之前删除V
)\d
is not supported in sed
,即使使用[0-9]
选项,也要使用-E
\1
占位符来放回在第1组中捕获的内容[0-9]+(\.[0-9]+){3}
匹配1个以上的数字,然后匹配3次出现的.
和1个以上的数字。再三考虑,您可能希望从较大的字符串中提取版本。然后,使用
sed -nE 's/.*Version: ([0-9]+(\.[0-9]+){3})\.[0-9].*/\1/p' <<< "Version: 4.4.0.157.165"