LinuxBash为正则表达式或正则表达式提供了许多命令和特性。 grep
, expr
, sed
和 awk
是其中的一些。Bash也有 =~
名为 RE-match
接线员。在本教程中,我们将了解 =~
操作员和用例。有关regex命令cna的更多信息,请参阅以下教程。
语法
bash重匹配的语法非常简单,我们只需提供字符串,然后放入运算符,最后一个是要匹配的正则表达式。我们还用双括号将表达式括起来,如下所示。
[[ STRING =~ REGEX]]
匹配数字
在bashshell的日常使用中,我们可能需要匹配数字或数字。我们可以使用bash正则表达式操作符。我们将用 [0-9]
就像下面一样。但请记住,bash正则表达式在某些情况下可能相当复杂。在本例中,我们将简单地匹配给定行中的数字
digit="ismail poftut 12345" if [[ $digit =~ [0-9] ]]; then echo "$digit is a digit" else echo "oops" fi

指定行的起点
在前面的例子中,我们在整行中匹配了数字。有时情况并非如此。我们可能需要从行首匹配其他字符类型的数字。我们可以用 ^
指定行的起点。在本例中,我们将匹配以 123
. 我们可以看到它不匹配。
digit="ismail poftut 12345" if [[ $digit =~ ^123 ]]; then echo "$digit is a digit" else echo "oops" fi

指定行尾
我们还可以在第行指定结束。我们将使用 $
指定行尾。我们将匹配以任何数字结尾的行。
digit="ismail poftut 12345" if [[ $digit =~ [0-9]$ ]]; then echo "$digit is a digit" else echo "oops" fi
匹配电子邮件
数字模式很容易表达,但是如何在bash中表达email regex呢。我们通常可以使用以下正则表达式模式来处理电子邮件。
[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+
我们将使用以下后缀 com
, net
, gov
因为有很多可能性。据我们所知 @
位于用户名和域名之间。
email=$1 if [[ "$email" =~ "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$" ]] then echo "This email address looks fine: $email" else echo "This email address is flawed: $email" fi

匹配IP地址
IP地址是bash和脚本中使用的另一种重要数据类型。我们可以使用bash regex来匹配IP地址。我们将使用下面的regex模式,这与以下工具相同 grep
和其他人。
[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
