用 sed 替换数字然后字符模式

Sha*_*hop 2 sed text-processing

我有一个如下所示的文件:

some
arbitrary number of
leading
lines
a prefix followed by wmd v0.0.0-20220406135915-ce5e3ee6c6bf
some
trailing
lines
Run Code Online (Sandbox Code Playgroud)

这只是文件外观的一个示例。对于我感兴趣的产品线,不变的部分是:

  • 总有wmd v0.0.0-, 其次是
  • 14 位数字,后跟
  • 连字符,后跟
  • 12 个字母数字字符

如何编写一个sed命令,允许我用20220406135915-ce5e3ee6c6bfshell 变量中的值替换该部分new_text

换句话说,如果new_text有值99999999999999-aaaaaaaaaaaa,我想找到将产生以下输出的命令<whatever goes here>部分:sed

$ sed -e "s/wmd v0.0.0-<whatever goes here>/wmd v0.0.0-$new_text/" my-file.txt
some
arbitrary number of
leading
lines
a prefix followed by wmd v0.0.0-99999999999999-aaaaaaaaaaaa
some
trailing
lines
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 5

您可以使用\{..\}量词来指定字符类应匹配的次数。

sed -e "s/wmd v0\.0\.0-[0-9]\{14\}-[0-9a-f]\{12\}/wmd v0.0.0-$new_text/"
#               ~  ~   ~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

另请注意,点在正则表达式中具有特殊含义。反斜杠使其字面匹配。

另请注意,如果$new_text包含斜杠或 sed 特有的其他一些字符,该命令可能会中断。