字符串:
"v1.0.20170728180812 latest ef1fc15"
"latest ef1fc15 v1.0.20170728180812-test"
"ef1fc15 v1.0.20170722150727 latest"
预期的字符串结果:
"v1.0.20170728180812"
"v1.0.20170728180812-test"
"v1.0.20170722150727"
代码:
string='latest ef1fc15 v1.0.20170728180812-test'
replace=$(echo $string | sed 's/v.*$//g')
echo $string | sed -e 's/$(echo $replace)//g'
谢谢你们! ;)
此脚本用于获取aws ecr的有效版本,并仅使用--apply将其部署到kubernetes(当使用“latest”时避免缓存)。
完整代码:
ecrVersions=$(aws ecr describe-images --repository-name <ECR_REPO_NAME> --image-ids imageTag=latest --output text)
appVersion=$(echo $ecrVersions | awk '{for (i=1;i<=NF;++i) {if($i~/^[v]/){print $i}}}')
echo $appVersion
答案 0 :(得分:1)
使用awk
:
awk '{for (i=1;i<=NF;++i) {if($i~/^[v]/){print $i}}}' yourfile.txt
这是:
for (i=1;i<=NF;++i)
if($i~/^[v]/)
print $i
我确定sed可以快速完成这项工作。
答案 1 :(得分:1)
POSIX shell代码。切断v
及之前的任何内容,(然后添加v
以替换丢失的那个),然后切断任何以及之后的任何内容:
string=v"${string##*v}"
string="${string%% *}"
演示:
for string in "v1.0.20170728180812 latest ef1fc15" \
"latest ef1fc15 v1.0.20170728180812-test" \
"ef1fc15 v1.0.20170722150727 latest"; do
string=v"${string##*v}"
string="${string%% *}"
echo $string
done
输出:
v1.0.20170728180812
v1.0.20170728180812-test
v1.0.20170722150727
答案 2 :(得分:0)
使用awk匹配功能:
awk '{match($0,"v[0-9][^\" ]+",a);print "\""a[0]"\""}' file