如何在Bash中从指定链接提取1.2-dirty版本子串?
提取链接中的版本字符串解决方案
以下几种命令行方法可以帮你从目标链接里提取出1.2-dirty:
方法一:用sed正则替换
直接通过正则匹配并提取目标部分,命令如下:sed -E 's/.*-(.*)\.tgz/\1/' version.txt原理:正则表达式
.*-(.*)\.tgz会匹配最后一个-之前的所有内容以及.tgz后缀,最终只输出中间捕获的1.2-dirty。方法二:用grep精准匹配
利用grep的Perl正则特性,只输出需要的片段:grep -oP '.*-\K.*(?=\.tgz)' version.txt原理:
.*-\K会忽略最后一个-之前的所有内容,(?=\.tgz)是正向预查,确保匹配的是.tgz前面的部分,-o参数让grep仅输出匹配到的内容。方法三:awk多步分割处理
先提取文件名,再分割提取目标字段:awk -F/ '{print $NF}' version.txt | awk -F- '{print $NF}' | sed 's/.tgz//'原理:第一个awk按
/分割,取最后一段(即文件名docker-image-internal-1.2-dirty.tgz);第二个awk按-分割取最后一段;最后用sed去掉.tgz后缀。方法四:basename结合cut
先去掉路径和后缀,再分割取目标段:basename $(cat version.txt) .tgz | cut -d'-' -f4原理:
basename命令先移除路径和.tgz后缀,得到docker-image-internal-1.2-dirty;再用cut按-分割,取第4个字段(前面三个-分隔的部分为docker、image、internal)。
内容的提问来源于stack exchange,提问作者khameb
相关产品推荐
相关产品推荐

