我想在 bash 脚本中将格式为 8.0.3.0 的变量更改为 8.0-3.0
所以它总是小数点中间到破折号
最有效的方法是什么?
您可以使用参数扩展,如下所示:
v="8.0.3.0"
echo "${v%*.*.*}-${v#*.*.}"
使用 GNU sed
您可以将替换后缀为您要替换的匹配项的出现:
$ echo "a.b.c.d" | sed 's/./-/2'
a.b-c.d
如果你有很多数据要处理,可能值得尝试这个解决方案,它不那么简洁,但避免调用外部程序,使用内部匹配,所以可能会更快。
string=8.0.3.0
if
[[ $string =~ ^([0-9])[.]([0-9])[.]([0-9])[.]([0-9])$ ]]
then
newstring="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}-${BASH_REMATCH[3]}.${BASH_REMATCH[4]}"
else
echo "ERROR: no match on $string"
fi
如果awk
是一个选择
awk '$0 = gensub( /./, "-", 2 )' file
8.0-3.0