我有一个像 package-0.0.1.jar 这样的包名称,我需要从该字符串中删除版本信息以及以 .jar 结尾的文件。我怎样才能实现这个目标?我发现你可以使用“%”符号来剪切字符串的一部分。所以我尝试了
JNAME="package-0.0.1.jar"
CLEAN="${JNAME%-.*\.jar}"
但这似乎不起作用,因为 CLEAN 之后具有完整的 JNAME 内容。 % 符号后面的正确顺序是什么?
答案1
%
带/ 的扩展#
不使用正则表达式;他们使用 shell glob。仅用于-*.jar
匹配版本和后缀。
CLEAN=${JNAME%-*.jar}
如果需要正则表达式,可以使用Bash 的[[ a =~ b ]]
和${BASH_REMATCH[…]}
(尽管在本例中不需要):
if [[ $JNAME =~ ^(.+)-[^-]+\.jar$ ]]; then
CLEAN=${BASH_REMATCH[1]}
fi
答案2
另一种方法是用于awk
此目的(假设您想要的名称以破折号结尾)
CLEAN=$(printf '%s' "$JNAME" | awk -F- '{print $1}')