Bash 中的模式匹配
模式匹配是 Bash 中的一项强大功能,它允许您将字符串与模式进行比较,以找到匹配项或根据比较结果执行操作。 这在检查字符串格式或从较大字符串中提取子字符串等情况下很有用。
本文将讨论如何在 Bash 中进行模式匹配,并介绍模式匹配中使用的一些常用运算符和技术。
使用 =~ 运算符进行模式匹配
要了解模式匹配在 Bash 中的工作原理,让我们首先看一下用于执行模式匹配的 =~
运算符。 该运算符有两个操作数:要匹配的字符串和要比较的模式。
例如,假设我们有一个名为 my_string 的字符串,其中包含一个 URL,我们想检查它是以“http”还是“https”开头。 我们可以使用 =~ 运算符来执行此比较。
my_string="https://www.example.com"
if [[ $my_string =~ ^https?:// ]]; then
echo "The string starts with a valid URL"
fi
输出:
The string starts with a valid URL
在上面的代码中,我们使用 =~
运算符将 my_string 变量与模式 ^https?://
进行比较。 ^
字符表示模式必须匹配字符串的开头,而 ?
字符表示前面的字符(在本例中为 https 中的 s)是可选的。
这意味着该模式将匹配字符串开头的“http://”或“https://”。
如果比较成功,则执行 if 语句,并打印消息“The string starts with a valid URL”。
使用 *
运算符进行模式匹配
模式匹配中的另一个常用运算符是 *
(星号)字符,它表示前面的字符可以匹配零次或多次。 例如,假设我们有一个包含数字的字符串,我们想检查它是否是最多两位小数的有效十进制数。
我们可以使用 *
运算符来执行此比较。
my_string="3.14"
if [[ $my_string =~ ^[0-9]+.[0-9]{0,2}$ ]]; then
echo "The string is a valid decimal number"
else
echo "The string is not a valid decimal number"
fi
输出:
The string is a valid decimal number
在上面的代码中,我们使用 =~
运算符将 my_string 变量与模式 ^[0-9]+\.[0-9]{0,2}$
进行比较。 ^
字符表示模式必须匹配字符串的开头,而 $
字符表示模式必须匹配字符串的末尾。
[0-9]
字符类匹配0-9任意数字,+字符表示前面的字符类必须匹配一次或多次。
我们使用 \(反斜杠)字符来转义 .
(点)字符,用于匹配任何单个字符。 {0,2}
量词表示前面的字符(在本例中为 [0-9]
字符类)必须匹配零到两次。
这意味着该模式只会匹配最多两位小数的数字,例如“3.14”或“42.00”。
如果比较成功,则执行if语句,并打印“该字符串是一个有效的十进制数”信息。
使用子模式进行模式匹配
模式匹配中使用的另一种常用技术是使用子模式。 子模式是括在括号中的模式的一部分,可用于对字符进行分组或引用输入字符串中的匹配子字符串。
例如,假设我们有一个包含格式为“YYYY-MM-DD”的日期的字符串,我们想从该字符串中提取年、月和日。 我们可以使用子模式来执行此提取。
my_string="2022-11-20"
if [[ $my_string =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})$ ]]; then
year=${BASH_REMATCH[1]}
month=${BASH_REMATCH[2]}
day=${BASH_REMATCH[3]}
echo "The year is: $year"
echo "The month is: $month"
echo "The day is: $day"
fi
输出:
The year is: 2022
The month is: 11
The day is: 20
在上面的代码中,我们使用 =~
运算符将 my_string 变量与 ^([0-9]{4})-([0-9]{2})-([0-9]{2} )$
模式。 ^
和 $
字符表示模式必须匹配整个字符串,而 ([0-9]{4})、([0-9]{2})
和 ([0-9]{2})
子模式分别匹配日期的年、月和日部分。
如果比较成功,则执行if语句,从输入字符串中提取年月日。 提取的子字符串存储在 BASH_REMATCH 数组中,可以使用索引 1、2 和 3 进行访问,它们分别对应于第一、第二和第三个子模式。
总之,模式匹配是 Bash 中的一项强大功能,它允许您将字符串与模式进行比较,以找到匹配项或根据比较结果执行操作。 这可以使用 =~
运算符来完成,它将字符串和模式作为操作数,如果字符串与模式匹配则返回 true。
模式匹配中使用的常见运算符和技术包括 *
(星号)运算符,它匹配前面的字符零次或多次,以及子模式,它允许您对字符进行分组或从输入字符串中提取匹配的子字符串。
相关文章
在 Bash 脚本中执行变量中的命令
发布时间:2023/05/18 浏览次数:106 分类:操作系统
-
本篇文章是关于将 Bash 命令存储在一个变量中,然后直接从这个变量中执行它。 首先,我们将讨论执行变量中包含的命令的多种方法,然后是几个脚本示例。
Bash md5sum 命令
发布时间:2023/05/18 浏览次数:197 分类:操作系统
-
本篇文章介绍如何在 Bash 中使用 md5sum 命令。Bash md5sum 命令。md5sum 命令打印给定文件的 32 字符和 128 位校验和。
在 Bash 中排序数组
发布时间:2023/05/18 浏览次数:150 分类:操作系统
-
对数组进行排序对于任何编程语言来说都是一项非常常见的任务。 在 Bash 脚本中,我们还可以通过两种不同的方式完成此任务。
Bash 中的多维数组
发布时间:2023/05/18 浏览次数:70 分类:操作系统
-
多维数组对于任何程序都是非常重要的元素。 它主要用于创建数据的表视图和许多其他用途。本文演示如何创建二维数组。 此外,我们将通过必要的示例和解释来讨论该主题。
在不指定 Bash 中的索引的情况下将新数据附加到数组
发布时间:2023/05/18 浏览次数:58 分类:操作系统
-
在 Bash 脚本中,您还可以使用数组; 您可以对数组进行声明、修改和操作。但在本文中,我们将逐步了解如何声明一个数组并将新数据添加到其中。 我们将看到在数组中添加新数据的两种不同
在 Bash 中打印数组元素
发布时间:2023/05/18 浏览次数:192 分类:操作系统
-
本文将展示我们如何在 Bash 脚本中打印数组元素。 为此,我们将讨论 5 种不同的方法。在 Bash 中使用 echo 语句打印数组元素
将数组传递给 Bash 中的函数
发布时间:2023/05/18 浏览次数:118 分类:操作系统
-
这篇文章是关于在 Bash 脚本中使用函数并将数组传递给它们的。 在进入实际主题之前,我们将简要介绍 Bash 脚本。