В настоящее время я пытаюсь получить определенные 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
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
Я могу получить redhat/ubi/ubi7/7.8/2020-02-14T222203.548_2868/ubi7-7.8.tar, выполнив
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
/2020-02-14T222203.548_2868/ubi7-7.8.tar
Я также хотел бы изменить / на - так что у меня redhat-ubi-ubi7-7.8
/
-
redhat-ubi-ubi7-7.8
Когда вы знаете позицию в строке, вы можете использовать cut
cut
echo "${string}" | cut -d/ -f 7-10 | tr '/' '-'
Другой способ с sed -
sed
echo "${string}" | sed -E 's#([^/]*/){6}([^/]*)/([^/]*)/([^/]*)/([^/]*).*#\2-\3-\4-\5#'
С GNU sed:
Получите 4 следующих элемента пути после .*/container-scan-reports/ и замените все / на -:
.*/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'