извлечь строку с помощью grep -oP - PullRequest
1 голос
/ 24 сентября 2019

Я получил пустую строку в переменной IMAGE_TAG при попытке извлечь подстроку :R8A144 из строки: загруженное изображение: rcsmw-ee:R8A144 на grep -oP в Jenkins execute shell:

Вот код:

ssh -o "StrictHostKeyChecking=no" -o UserKnownHostsFile=/dev/null eccd@${DIRECTOR_IP_NUM} '
LOADED_IMAGE=$(sudo su root -c "docker load -i rcsmw-ee-5940688.4.tar")
IMAGE_TAG=$(echo $LOADED_IMAGE | grep -oP '\(:[A-ZA]\)\w+')
echo $IMAGE_TAG
'

вот вывод:

bash: command substitution: line 5: syntax error near unexpected token `('
bash: command substitution: line 5: `echo $LOADED_IMAGE | grep -oP (:[A-ZA])w+)'
Error parsing reference: "rcsmw-ee:" is not a valid repository/tag: invalid reference format

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Другое решение - использовать ssh с тегом, как показано ниже: ssh -o "StrictHostKeyChecking = no" -o UserKnownHostsFile = / dev / null eccd @ $ {DIRECTOR_IP_NUM} << 'SSHTAG'.IMAGE_TAG = $ (echo $ LOADED_IMAGE | grep -oP '(: [A-ZA]) \ w +').,SSHTAG </p>

0 голосов
/ 24 сентября 2019

У вас есть целый набор команд внутри одинарных кавычек, поэтому вы не можете использовать одинарные кавычки вокруг шаблона grep.

Кроме того, "$LOADED_IMAGE" также лучше использовать в двойных кавычках, поскольку это может привести кпроблема, если он содержит пробелы.

Кроме того, A после A-Z является избыточным, как и группа захвата, вы можете удалить скобки в шаблоне и использовать

IMAGE_TAG=$(echo "$LOADED_IMAGE" | grep -oP -m 1 ":[A-Z]\w*")

Или, используя эквивалентное регулярное выражение POSIX BRE:

IMAGE_TAG=$(echo "$LOADED_IMAGE" | grep -o -m 1 ":[[:upper:]][[:alnum:]_]*")

Примечание -m 1 с grep извлечет только первое совпадение, которое, похоже, соответствует тому, что вы здесь.

...