我正在尝试使用 maven 自动部署由我们的构建服务器生成的 war 文件。我需要能够从 war 文件名中提取项目名称,以便在部署文件之前重命名文件。(因为 tomcat 使用文件名作为默认上下文路径,而我不希望版本在其中)
文件名通常采用projectname-version
. 格式,例如:
myproject-1.2.3-SNAPSHOT.war
my-better-project-1.2.3-RELEASE.war
my-fancy-project-1.2.3.war
- 快照或者发布文件名中可能包含或不包含。
- 一个棘手的部分是当项目名称包含破折号时提取项目名称。
结果应该是没有版本信息的项目名称:
myproject
my-better-project
my-fancy-project
如何使用 bash 和 sed(或仅 bash)实现这一点?
答案1
使用 GNU sed:
sed 's/-[0-9]\+.*//' file
输出:
我的项目 我的更好的项目 我的奇思妙想项目
使用 bash:
while read -r string; do
[[ $string =~ (-[0-9]+.*) ]] && echo "${string%${BASH_REMATCH[1]*}}"
done < file
使用 GNU grep:
grep -oP '.*(?=-[0-9]+.*)' file