我想从输入字符串中删除最后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
Run Code Online (Sandbox Code Playgroud)
错误:
糟糕的替代
sed对这个问题来说太过分了.要从-dev任何POSIX shell中的字符串末尾删除,请使用
version=${newversion%-dev}
Run Code Online (Sandbox Code Playgroud)
或更一般地说
version=${newversion%-???} # Remove the final - and the next 3 characters
Run Code Online (Sandbox Code Playgroud)
甚至
version=${newversion%-*} # Remove the final - and anything after it.
Run Code Online (Sandbox Code Playgroud)
如果你正在使用bash(你似乎没有),你的第一次尝试就很接近; 你只需要一个额外的$.它应该是
version=${newversion::-4}
Run Code Online (Sandbox Code Playgroud)
虽然该位置的负值需要bash4.在bash3中,您需要使用字符串的长度来计算值:
version=${newversion::${#newversion}-4}
Run Code Online (Sandbox Code Playgroud)
如果 $newversion 包含“5.5.5-dev”。IEnewversion="5.5.5-dev"
为什么不尝试 sed 删除 -dev。
version=`echo $newversion | sed "s/-dev//g"`
Run Code Online (Sandbox Code Playgroud)
或者如果您正在使用bash
version=`sed "s/-dev//g"<<<$newversion`
Run Code Online (Sandbox Code Playgroud)