【发布时间】:2019-11-29 20:45:25
【问题描述】:
我正在尝试使用以下 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”字符。
有什么原因吗?
【问题讨论】:
-
为什么不使用 Ruby
.gsub?tar_name = tar_name.gsub(/-(?:[0-9]+\.){2}[0-9.-]*/, '.')?但问题是"..."中的\.?被解释为.,任何字符。 -
感谢 Wiktor,gsub 命令实际上对我有用。现在,我将使用它来获得结果。