如何在 bash 中匹配以下字符串的正则表达式?

如何在 bash 中匹配以下字符串的正则表达式?

下面的字符串我需要比较条件运算符。因此,只有当 81.1.4_r4345 执行某些操作或匹配“done”时,才会执行某些操作。

  vasanth-releases_81.1.4_r4345.tar.gz

     vasanth-releases-done.tar.gz
  

If [[ $var == ‘vasanth-releases_{0-9}_{0-9}.tar.gz ]] ; then 
    echo ‘True’
Elsif [[ $var  == ‘Vasanth-releases-{a-z}.tar.gz ]]; then 
    echo ‘False’
else 
    echo ‘default’
fi

以上尝试未按预期工作。所以这两个文件需要正则表达式格式。你能帮忙解决这个问题吗

谢谢

答案1

我不太确定您的最终目标是什么,但我可以指出您的代码的一些问题:

  1. 您不应在 shell 命令或内置命令中使用大写字母,因此If应该if
  2. elsif无效,应该是elif
  3. 您使用“智能引号”可能是因为从不适合代码编辑的文字处理器中复制出来。
  4. 即使智能引号更改为常规引号,您也会在第一个条件中打开单引号,并且在第二个条件之前不会再次关闭它。
  5. 在 bash 中,您需要使用=~运算符进行正则表达式比较,而不是==运算符。
  6. 大括号不能完成您在正则表达式中想要完成的任务,您需要使用[0-9][a-z]匹配这些范围内的任何字符。
  7. 即使您修复了正则表达式中的括号,它们仍然与您的文件不匹配。您可以尝试使用 regex101.com 构建正确的正则表达式,但请注意 bash 会扩展正则表达式,这在 regex101 上不是可用的选项,pcre 很接近,但您会发现一些不交叉兼容的东西。

答案2

正在寻找这样的东西吗?

#!/bin/bash

var="vasanth-releases_81.1.4_r4345.tar.gz"
if [[ $var =~ ^vasanth-releases_[0-9.]+_r[0-9]+\.tar\.gz$ ]]; then
    echo ‘True’
elif [[ $var  =~ ^vasanth-releases-[a-z]+\.tar\.gz$ ]]; then
    echo ‘False’
else
    echo ‘default’
fi

var="vasanth-releases-done.tar.gz"
if [[ $var =~ ^vasanth-releases_[0-9.]+_r[0-9]+\.tar\.gz$ ]]; then
    echo ‘True’
elif [[ $var =~ ^vasanth-releases-[a-z]+\.tar\.gz$ ]]; then
    echo ‘False’
else
    echo ‘default’
fi

相关内容