如何找到给定格式的版本号并替换为新版本号

时间:2016-03-16 12:42:13

标签: bash sed

我想创建一个bash脚本来将现有版本号更新为给定的版本号

代码中的版本号为:

test_1_2_3_456

模式将是

test_#_#_#_###

我想通过像

这样的bash参数替换它
7_0_0_123

赦免将是

/my_script 7_0_0_123

在my_script中,它可以找到模式并替换为7_0_0_123

3 个答案:

答案 0 :(得分:1)

我认为这会对你有所帮助:

new=7_0_0_123
echo test_1_2_3_456 | sed -E 's/test_[0-9]_[0-9]_[0-9]_[0-9]{3}/test_'$new'/'
test_7_0_0_123

with:

  • -E:将正则表达式解释为扩展(现代)正则表达式而不是基本常规

  • [0-9]匹配1位

  • [0-9]{3}匹配3位数字(不能少于更多)
  • '$new'您要使用的新字符串

答案 1 :(得分:1)

你可以用更紧凑的方式写出来

$ echo test_1_2_3_456 | sed -r 's/(test)(_[0-9]){4}[0-9]{2}/\1_7_0_0_123/'
test_7_0_0_123

说明:匹配模式" test"然后是4份" _"然后是单个数字和2个附加数字,替换为第一个分组匹配(即" test")和所需的版本号。这消除了对正则表达式功能的重复"测试",需要-r选项。

答案 2 :(得分:0)

使用GNU var collection = _database.GetCollection<BsonDocument>("clicks");

sed

示例:

sed -r 's/^test_[0-9]_[0-9]_[0-9]_[0-9]{3}$/7_0_0_123/' file.txt