Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何找到给定格式的版本号并替换为新的版本号_Bash_Sed - Fatal编程技术网

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

Bash 如何找到给定格式的版本号并替换为新的版本号,bash,sed,Bash,Sed,我想制作一个bash脚本,将现有的版本号更新为给定的版本号 代码中的版本号为: test_1_2_3_456 这种模式将是 test_#_#_#_### 我想通过bash参数将其替换为一个新的 7_0_0_123 附件是 /my_script 7_0_0_123 在我的脚本中,它可以找到模式并替换为7_0_0_123我认为这将帮助您: new=7_0_0_123 echo test_1_2_3_456 | sed -E 's/test_[0-9]_[0-9]_[0-9]_[0-9]{3}

我想制作一个bash脚本,将现有的版本号更新为给定的版本号

代码中的版本号为:

test_1_2_3_456
这种模式将是

test_#_#_#_###
我想通过bash参数将其替换为一个新的

7_0_0_123
附件是

/my_script 7_0_0_123

在我的脚本中,它可以找到模式并替换为7_0_0_123

我认为这将帮助您:

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
与:

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

  • [0-9]
    匹配1位数字

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

    • 我认为这将有助于您:

      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
      
      与:

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

      • [0-9]
        匹配1位数字

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

      带有GNU
      sed

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

      % sed -r 's/^test_[0-9]_[0-9]_[0-9]_[0-9]{3}$/7_0_0_123/' <<<'test_1_2_3_456'
      
      7_0_0_123
      

      %sed-r/^test[0-9][0-9][0-9][0-9]{3}$/7\u 0\u 0\u 123/'与GNU
      sed

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

      % sed -r 's/^test_[0-9]_[0-9]_[0-9]_[0-9]{3}$/7_0_0_123/' <<<'test_1_2_3_456'
      
      7_0_0_123
      

      %sed-r的/^test[0-9][0-9][0-9][0-9]{3}$/7\u 0\u 0\u 123/'您可以用更简洁的方式编写它

      $ 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份“u”,然后是单个数字和2个附加数字,替换为第一组匹配(即“test”)和所需的版本号。这消除了重复的“测试”,需要正则表达式功能的
      -r
      选项。

      您可以用更简洁的方式编写它

      $ 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份“u”,然后是单个数字和2个附加数字,替换为第一组匹配(即“test”)和所需的版本号。这消除了重复的“测试”,需要对正则表达式功能使用
      -r
      选项。

      我认为@AvinashRaj的意思是:到目前为止你尝试了什么?我认为@AvinashRaj的意思是:到目前为止你尝试了什么?虽然这段代码可以回答这个问题,提供关于该代码为什么和/或如何回答该问题的附加上下文将显著提高其长期价值。请在您的回答中添加一些解释。虽然此代码可能会回答此问题,但提供有关此代码为什么和/或如何回答此问题的其他上下文将显著提高其长期价值。请在您的回答中添加一些解释。