我正在尝试使用以下sed命令剥离字符串中的版本号:
sed -E "s/\-[0-9]+\.[0-9]+\.[0-9]+\-?[0-9]*\.?[0-9]*\-?[0-9]*\.?/./g"
因此,这会将字符串“ abc-de-sap-web-1.0.152.war”转换为“ abc-de-sap-web.war”。当作为bash命令运行时,此方法可以找到。但是,我试图通过ruby脚本来运行它。所以我尝试了以下命令:
tar_name = `echo "abc-de-sap-web-1.0.152.war" | sed -E "s/\-[0-9]+\.[0-9]+\.[0-9]+\-?[0-9]*\.?[0-9]*\-?[0-9]*\.?/./g"`
输入“ tar_name”
但是,现在的输出是“ abc-de-sap-web.ar”。它也带有“ w”字符。
任何理由吗?
答案 0 :(得分:1)
问题在于,双引号字符串文字中的\.?
被解释为与任何字符匹配的.
。
我建议使用Ruby gsub
:
tar_name = tar_name.gsub(/-(?:[0-9]+\.){2}[0-9.-]*/, '.')
详细信息
-
-连字符(?:[0-9]+\.){2}
-两个重复的1+个数字和一个点[0-9.-]*
-0个或多个数字,点或连字符比赛用一个点代替。