С GNU sed:
sed 's/-[0-9]\+.*//' file
Выход:
мой проект мой-лучше-проект мой-фантазии-проект
С bash:
while read -r string; do [[ $string =~ (-[0-9]+.*) ]] && echo "$}" done < file
С GNU grep:
grep -oP '.*(?=-[0-9]+.*)' file
Я пытаюсь автоматизировать развертывание военных файлов, сгенерированных нашим сервером сборки с использованием maven. Мне нужно иметь возможность извлечь имя проекта из имени файла войны, чтобы я мог переименовать файл перед его развертыванием. (Поскольку 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)?
С GNU sed:
sed 's/-[0-9]\+.*//' file
Выход:
мой проект мой-лучше-проект мой-фантазии-проект
С bash:
while read -r string; do [[ $string =~ (-[0-9]+.*) ]] && echo "$}" done < file
С GNU grep:
grep -oP '.*(?=-[0-9]+.*)' file