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

Ano*_*ony 2 bash regex

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

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

例如:

value=$(cat file | awk 'NF{print;exit}' | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*024 6

使用 case

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

case "$value" in
  AB[CD]*) echo yes;;
   *)      echo no;;
esac
Run Code Online (Sandbox Code Playgroud)

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

使用 [

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

if [ "${value#AB[CD]}" != "$value" ]
then
   echo yes
else
   echo no
fi
Run Code Online (Sandbox Code Playgroud)

这也很便携。

使用 [[

最后,可以使用更现代且便携性更低的测试命令:

if [[ $value == AB[CD]* ]]
then
   echo yes
else
   echo no
fi
Run Code Online (Sandbox Code Playgroud)

一步读取文件并测试

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

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