Ubuntu – How to check for a matching pattern in bash

bashregex

I have a file in which value starts with ABC or ABD.

After fetching the value from input file how to check it starts with ABC or ABD?

eg:

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

and now I want to check this $value is starting with ABC or ABD . how?

Best Answer

Using case

To check if a shell variable starts with ABC or ABD, a traditional (and very portable) method is to use a case statement:

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

Because this requires no external processes, it should be fast.

Using [

Alternatively, one can use a test command:

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

This is also quite portable.

Using [[

Lastly, one can use the more modern and less portable test command:

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

Reading the file and testing all in one step

To read the first nonempty line of a file and test if its first field start with ABC or ABD:

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