使用bash替换版本号中的最后一个数字

时间:2015-09-15 09:14:52

标签: bash awk sed terminal

我在文件中有以下字符串:

<Product Id="*" Name="NAME" Language="1033" Version="1.2.3.4" Manufacturer="Manufacturer" UpgradeCode="12345">

我想使用带有新数字的bash命令(sed?)替换版本值中的最后一个数字字段(即&#34; 4&#34;)。我希望能够将此更改为我通过的任何其他号码。我尝试使用:

sed -i -e "s#Version=\"\([0-9]\)\.\([0-9]+\)\.\([0-9]+\)\.\([0-9]+\)\"#Version=\"\1\.\2\.\3\.10\"#g" <filename>

但这没有用。

3 个答案:

答案 0 :(得分:3)

尝试这个sed行:

更新

修正:

000000

以上行将最后sed -r 's/(.*Version="[^"]*[.])[^."]+(".*)/\1foo\2/ file 更改为4。您只需将foo更改为所需的值。

答案 1 :(得分:1)

如果你有gnu-awk,你可以这样做:

awk -v n=8 '{print gensub(/(Version="[0-9.]+\.)[0-9]+"/, "\\1" n "\"", "1")}' file
<Product Id="*" Name="NAME" Language="1033" Version="1.2.3.8" Manufacturer="Manufacturer" UpgradeCode="12345">

n是您要在文件中更新的版本#。

答案 2 :(得分:1)

假设:

  • (cfr @ 999999999999999999999999999999)版本中至少有一个点(根据定义需要增加或修改)
  • 它只有1个版本可以按行更改,而行是好的版本(没有预选也没有分隔,其中XML允许多行&#34;标记&#34;每行)并且不会在几行上传播
  • 我使用[[:alnum:]]课程,而不仅仅[[:digit:]]允许使用 beta 等版本中的字母,...

sed 's/\([[:blank:]]Version="[^"]*[.]\)[[:alnum:]]*"/\1YourNumber"/' YourFile