如何在 bash 中检查匹配模式?

如何在 bash 中检查匹配模式?

我有一个文件,其中的值以 ABC 或 ABD 开头。

从输入文件获取值后,如何检查它是以 ABC 还是 ABD 开头?

例如:

value=$(cat file | awk 'NF{print;exit}' | awk '{print $1}')

现在我想检查这个 $value 是否以 ABC 或 ABD 开头。怎么做?

答案1

使用case

要检查 shell 变量是否以 ABC 或 ABD 开头,一种传统(且非常可移植)的方法是使用 case 语句:

case "$value" in
  AB[CD]*) echo yes;;
   *)      echo no;;
esac

因为这不需要外部过程,所以它应该很快。

使用[

或者,也可以使用测试命令:

if [ "${value#AB[CD]}" != "$value" ]
then
   echo yes
else
   echo no
fi

这也是相当便携的。

使用[[

最后,人们可以使用更现代、更不便携的测试命令:

if [[ $value == AB[CD]* ]]
then
   echo yes
else
   echo no
fi

一步读取文件并进行测试

读取文件的第一个非空行并测试其第一个字段是否以 ABC 或 ABD 开头:

awk 'NF{if ($1~/^AB[CD]/) print "yes"; else print "no";exit}' file

答案2

尝试这个:

 echo $value | grep -c "^AB[CD]"

如果模式在开始时就存在,则将返回 1。

相关内容