如何用grep提取最后一个/与:之间的子字符串?
提取镜像名中最后一个
/和:之间的子串 针对字符串 registry.gitlab.com/gitlab-org/cloud-native/mirror/images/busybox:latest,要提取最后一个/与:之间的busybox,可以用以下几种方法解决:
修正后的grep命令
你之前的正则用了.*贪婪匹配,会从第一个/开始匹配到:,把正则改成匹配非/字符即可:
echo "registry.gitlab.com/gitlab-org/cloud-native/mirror/images/busybox:latest" | grep -Po '(?<=/)[^/]+(?=:)'
[^/]+:匹配一个或多个不含/的字符,确保只取最后一个/之后的内容- 执行后直接输出
busybox
awk方法
用/和:作为分隔符,取倒数第二个字段:
echo "registry.gitlab.com/gitlab-org/cloud-native/mirror/images/busybox:latest" | awk -F'[:/]' '{print $(NF-1)}'
-F'[:/]':指定分隔符为:或/NF是总字段数,$(NF-1)就是倒数第二个字段,对应目标内容
sed方法
通过正则捕获目标内容并替换输出:
echo "registry.gitlab.com/gitlab-org/cloud-native/mirror/images/busybox:latest" | sed 's/.*\/\([^:]\+\):.*/\1/'
.*\/:匹配到最后一个/为止的所有内容\([^:]\+\):捕获:之前的非:字符(即目标内容)\1:输出捕获到的内容
内容的提问来源于stack exchange,提问作者jw2j
相关产品推荐
相关产品推荐

