Извлечение подпоследовательности из шаблона сопоставления выражений с помощью / bin / ash - PullRequest
0 голосов
/ 30 октября 2019

Я хотел автоматизировать тегирование своих артефактов, и я написал простой сценарий оболочки, который извлекает версию из тега git (которая соответствует шаблону):

#!/bin/sh
regex="^RELEASE-(.*)$"
if [[ $1 =~ $regex ]]; then
 echo -n "${BASH_REMATCH[1]}"
 exit 0
else
 exit 1 
fi

Тогда я получилошибки при сборке с docker:latest изображением, после некоторой борьбы я обнаружил, что по какой-то причине у этого изображения нет /bin/bash, вместо этого они предпочитают /bin/ash.

Проблема в том, что я не нашел замены для оператора регулярных выражений в ash. После поиска в Google я нашел предложение сделать это с помощью sed, например:

echo -n "RELEASE-1.0.0" | sed 's/^RELEASE-\(.*\)$/\1/'

Однако, этот пример терпит неудачу эпично, потому что он печатает весь ввод, если регулярное выражение не соответствует ...

Есть ли разумная замена / исправление для этого оператора соответствия регулярному выражению?

1 Ответ

1 голос
/ 30 октября 2019

Попробуйте запустить модифицированную версию, которая будет печатать только на совпадения:

echo -n "RELEASE-1.0.0" | sed -n 's/^RELEASE-\(.*\)$/\1/p'

Опция '-n' sed и команда '/ p' для команды 's' будут печататься, только если была выполнена подстановка

...