我想从输入字符串中删除最后4个字符串,然后在sed命令中使用它。但我无法让它正常工作
newversion是一个输入参数,它设置为:5.5.5-dev。 我想从输入参数中删除-dev。
我尝试了什么:
version=${$newversion::-4}
sed -i "s|\(<<some name i defined>>/$imagename:\)\([^\n]*\)|\1$version|" docker-compose.yml
错误:
糟糕的替换
答案 0 :(得分:5)
sed
对这个问题来说太过分了。要从任何POSIX shell中的字符串末尾删除-dev
,请使用
version=${newversion%-dev}
或更一般地
version=${newversion%-???} # Remove the final - and the next 3 characters
甚至
version=${newversion%-*} # Remove the final - and anything after it.
如果您使用的是bash
(您似乎不是),那么您的第一次尝试就会结束;你只需要额外的$
。它应该是
version=${newversion::-4}
虽然该位置的负值需要bash
4.在bash
3中,您需要使用字符串的长度来计算值:
version=${newversion::${#newversion}-4}
答案 1 :(得分:2)
如果$ newversion包含“5.5.5-dev”。
即newversion="5.5.5-dev"
为什么不尝试使用sed删除-dev。
version=`echo $newversion | sed "s/-dev//g"`
或者如果您使用bash
version=`sed "s/-dev//g"<<<$newversion`
答案 2 :(得分:0)
version="$(echo $newversion | sed 's/-dev//g')"
sed -i "s|\(<<some name i defined>>/$imagename:\)\([^\n]*\)|\1$version|" docker-compose.yml
原来我们需要将它包装在方法调用中$()
这是解决方案。在Sudheesh shetty的帮助下