我想从输入字符串中删除最后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错误:
糟糕的替换
发布于 2016-02-01 23:05:14
对于这个问题,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 (看起来并不是这样),那么您的第一次尝试是close;您只是有了一个额外的$。它应该是
version=${newversion::-4}尽管该位置的负值需要bash 4。在bash 3中,您需要使用字符串的长度来计算值:
version=${newversion::${#newversion}-4}发布于 2016-02-01 20:33:09
如果$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`发布于 2016-02-01 20:54:34
version="$(echo $newversion | sed 's/-dev//g')"
sed -i "s|\(<<some name i defined>>/$imagename:\)\([^\n]*\)|\1$version|" docker-compose.yml原来我们需要将它包装在一个名为$()的方法中,这就是解决方案。在Sudheesh shetty的帮助下
https://stackoverflow.com/questions/35130474
复制相似问题