как отследить шаблон до и после матча - PullRequest
0 голосов
/ 07 марта 2020

В настоящее время я пытаюсь получить определенные c параметры из URL.

Мой URL выглядит так: https://private.io/report-artifact/dsop-pipeline-artifacts/container-scan-reports/redhat/ubi/ubi7/7.8/2020-02-14T222203.548_2868/ubi7-7.8.tar

Я хочу просто redhat/ubi/ubi7/7.8

Я могу получить redhat/ubi/ubi7/7.8/2020-02-14T222203.548_2868/ubi7-7.8.tar, выполнив

echo https://private.io/report-artifact/dsop-pipeline-artifacts/container-scan-reports/redhat/ubi/ubi7/7.8/2020-02-14T222203.548_2868/ubi7-7.8.tar | sed 's|.*/container-scan-reports/||'

Таким образом, я хочу удалить /2020-02-14T222203.548_2868/ubi7-7.8.tar

Я также хотел бы изменить / на - так что у меня redhat-ubi-ubi7-7.8

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Когда вы знаете позицию в строке, вы можете использовать cut

echo "${string}" | cut -d/ -f 7-10 | tr '/' '-'

Другой способ с sed -

echo "${string}" | sed -E 's#([^/]*/){6}([^/]*)/([^/]*)/([^/]*)/([^/]*).*#\2-\3-\4-\5#'
1 голос
/ 07 марта 2020

С GNU sed:

Получите 4 следующих элемента пути после .*/container-scan-reports/ и замените все / на -:

url='https://private.io/report-artifact/dsop-pipeline-artifacts/container-scan-reports/redhat/ubi/ubi7/7.8/2020-02-14T222203.548_2868/ubi7-7.8.tar'
echo "$url" | sed -E 's|.*/container-scan-reports/(([^/]*/){3}[^/]*).*|\1|;s|/|-|g'

Или вы можете получить все после .*/container-scan-reports/, но не последние два элемента пути:

echo "$url" | sed -E 's|.*/container-scan-reports/(.*)/[^/]*/[^/]*|\1|;s|/|-|g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...