How To Use Regular Expression – Regex In Bash Linux? – POFTUT

How To Use Regular Expression – Regex In Bash Linux?


Linux bash provides a lot of commands and features for Regular Expressions or regex. grep , expr , sed and awk  are some of them. Bash also have =~ operator which is named as RE-match  operator. In this tutorial we will look =~  operator and use cases. More information about regex command cna be found in the following tutorials.

Introduction to Linux Grep Command With Examples

Awk Regular Expression Commands and Examples

Ultimate Sed Tutorial With Examples

Syntax

Syntax of the bash rematch is very easy we just provide the string and then put the operator and the last one is the regular expression we want to match. We also surround the expression with double brackets like below.

[[ STRING =~ REGEX]]

Match Digits

In daily bash shell usage we may need to match digits or numbers. We can use bash regex operator. We will state numbers with [0-9] like below. But keep in mind that bash regex can be fairly complicated in some cases. In this example we will simple match given line for digits

 
digit="ismail poftut 12345" 
 
if [[ $digit =~ [0-9] ]]; then 
    echo "$digit is a digit" 
else 
    echo "oops" 
fi
Match Digits
Match Digits

Specify Start Of Line

In previous example we have matched digits in the whole line. This is not case some times. We may need to match from start of the line with digits of other character type. We can use ^ to specify start of the line. In this example we will match line which starts with 123 . As we can see it didn’t match.

digit="ismail poftut 12345" 
 
if [[ $digit =~ ^123 ]]; then 
    echo "$digit is a digit" 
else 
    echo "oops" 
fi
Specify Start Of Line
Specify Start Of Line

Specify End Of Line

We can also specify the end on line. We will use $  to specify end of line. We will match line which ends with any digit.

digit="ismail poftut 12345" 
 
if [[ $digit =~ [0-9]$ ]]; then 
    echo "$digit is a digit" 
else 
    echo "oops" 
fi

Match Email

Digit patterns are easy to express but how can we express email regex in bash. We can use following regex pattern for emails generally.

[A-Za-z0-9._%+-]+<b>@</b>[A-Za-z0-9.-]+

We will ommit suffixes like com , net  , gov  etc. because there is a lot of possibilities. As we know @ is sitting between username and domain name.

email=$1 
 
if [[ "$email" =~ "^[A-Za-z0-9._%+-]+<b>@</b>[A-Za-z0-9.-]+<b>\.</b>[A-Za-z]{2,4}$" ]] 
then 
    echo "This email address looks fine: $email" 
else 
    echo "This email address is flawed: $email" 
fi
Match Email
Match Email

Match IP Address

IP address is another type of important data type which is used in bash and scripting. We can match IP addresses by using bash regex. We will use following regex pattern which is the same with tools like grep  and others.

[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

 

ip=$1 
 
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then 
    echo "Looks like an IPv4 IP address" 
elif [[ $ip =~ ^[A-Fa-f0-9:]+$ ]]; then 
    echo "Could be an IPv6 IP address" 
else 
    echo "oops" 
fi
Match IP Address
Match IP Address

LEARN MORE  Javascript Regular Expression Operation

1 thought on “How To Use Regular Expression – Regex In Bash Linux?”

Leave a Comment