1

Я пытаюсь автоматизировать развертывание военных файлов, сгенерированных нашим сервером сборки с использованием 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
  • SNAPSHOT или RELEASE могут или не могут быть включены в имя файла.
  • Одна сложная часть состоит в том, чтобы извлечь имя проекта, когда имя проекта содержит тире.

Результатом должно быть имя проекта без информации о версии:

myproject
my-better-project
my-fancy-project

Как я могу добиться этого, используя bash и sed (или только bash)?

1 ответ1

2

С GNU sed:

sed 's/-[0-9]\+.*//' file

Выход:

myproject
my-better-project
my-fancy-project

С bash:

while read -r string; do
  [[ $string =~ (-[0-9]+.*) ]] && echo "${string%${BASH_REMATCH[1]*}}"
done < file

С GNU grep:

grep -oP '.*(?=-[0-9]+.*)' file

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .