我想从包含以下行的文件中获取构建版本:
<Assembly: AssemblyVersion("004.005.0862")>
我希望它返回
4.5.862
我在dos中使用sed并得到以下内容吐出004.005.0862
echo "<Assembly: AssemblyVersion("004.005.0862")>" | sed "s/[^0-9,.]//g"
如何清除内部版本号的每个部分的前导零?
答案 0 :(得分:2)
一步完成此操作的正则表达式如下所示:
^.*"0*([0-9]+\.)0*([0-9]+\.)0*([0-9]+).*
使用特定于sed的转义并作为完整表达式,它会变得更长一些:
s/^.*"0*\([0-9]\+\.\)0*\([0-9]\+\.\)0*\([0-9]\+\).*/\1\2\3/g
正则表达式分解为
^ # start-of-string .*" # anything, up to a double quote 0*([0-9]+\.) # any number of zeros, then group 1: at least 1 digit and a dot 0*([0-9]+\.) # any number of zeros, then group 2: at least 1 digit and a dot 0*([0-9]+) # any number of zeros, then group 3: at least 1 digit .* # anything up to the end of the string
答案 1 :(得分:0)
也许... | sed "s/[^0-9]*0*([1-9][0-9,.]*)/\1/g"
。我正在使用子模式过滤掉你需要的部分,忽略前导零和非数字字符。
答案 2 :(得分:0)
可能有许多更聪明的方法,但有一种方法(并且相当容易理解)是通过额外的调用来管理它:
echo "version(004.005.0862)" | sed "s/[^0-9,.]//g" | sed "s/^0*//g" | sed "s/\.0*/./g"