正则表达式(缩写为regex或regexp)基本上是定义搜索模式的字符串,可用于执行“搜索”或“搜索和替换”操作,或者可用于验证密码策略等条件。正则表达式是我们可以使用的非常强大的工具,使用正则表达式的好处是几乎所有的计算机语言都可以使用它们。因此,如果您使用Bash脚本或创建Python程序,我们可以使用正则表达式,或者我们可以编写单行搜索查询。在本教程中,我们将学习正则表达式的一些基本概念,并学习如何在Bash中与grep一起使用它们,但是如果您想在其他语言(例如python或C)中使用它们,则只能使用正则表达式公式部分.那么让我们从一个正则表达式的例子开始,它看起来像/t[aeiou]l/。但是,这是什么意思?这意味着上述正则表达式将查找以t开头且中间包含字母aeiou且字母l作为最后一个字符的单词。它可以是tel、tal或til,并且可以匹配单个词或另一个词的一部分,例如tilt、brutal或telephone。grep使用正则表达式的语法是$grep"regex_search_term"file_location如果你不明白,别担心,这只是一个例子来展示用正则表达式可以得到什么,相信我,这是最简单的例子。我们可以从正则表达式中得到更多。现在我们将从正则表达式的基础开始。推荐阅读:你应该知道的有用的Linux命令基本正则表达式现在我们开始学习一些称为元字符的特殊字符。它们可以帮助我们创建更复杂的正则表达式搜索词。下面提到的是基本元字符列表,.点将匹配任何字符[]将匹配一系列字符[^]将匹配除括号中提到的字符之外的所有字符*将匹配前面的零个或多个+将匹配前面的一个或多个项目?将匹配零个或一个前面的项目{n}将匹配n个前面的项目{n,}将匹配n个或多个前面的项目{n,m}将匹配n到m个项目{,m}将匹配小于或等于m次出现的项目\是当我们需要在搜索中包含元字符时使用的转义字符现在我们将通过示例讨论所有这些元字符。这。(点)用于匹配出现在我们的搜索词中的任何字符。例如,我们可以这样使用:$grep"d.g"file1这个正则表达式表示我们在名为'file1'的文件中查找的单词以d开头,以g结尾,string之间可以有1个字符。此外,我们可以使用任意数量的点作为搜索模式,例如T...h,此查询词将查找以T开头并以h结尾且中间可以有任意6个字符的单词。[]方括号用于定义字符范围。例如,我们需要搜索一些特殊的词,而不是匹配任何字符,$grep"N[oen]n"file2这里,我们要查找一个以N开头,以n结尾,并且只能有o的词,e或n之一。在方括号中,我们可以提及单个到任意数量的字符。我们还可以定义一个列表,如a-e或1-18作为方括号中的匹配字符。[^]这就像正则表达式的非运算符。使用[^]时,意味着我们的搜索将包括除方括号中提到的字符之外的所有字符。例如,$grep"St[^1-9]d"file3这意味着我们可以拥有所有以St开头并以字母d结尾且不得包含从1到9的任何数字的单词。到目前为止,我们已经仅使用了只需要在中间找到单个字符的正则表达式示例,但是如果我们需要更多字符怎么办。假设我们需要找到所有以一个字符开头和结尾的单词,并且中间可以有任意数量的字符。这是我们使用像+*和?这样的乘数元字符的地方。.{n}、{n,m}、{n,}或{,m}也是可以在我们的正则表达式项中使用的其他乘数元字符。*(星号)以下示例匹配字母k的任何出现,包括无:$grep"lak*"file4这意味着我们可以匹配lake、la或lakkkk。+以下模式要求字符串中的字母k至少匹配一次:$grep"lak+"file5这里k需要在我们的搜索中至少出现一次,所以我们的结果可以是lake或lakkkk,但不是la。?在以下模式匹配中$grep"ba?b"file6匹配字符串bb或bab,使用?乘数,我们可以有一个或零个字符出现。非常重要的注意事项这在使用乘数时非常重要,假设我们有一个正则表达式$grep"S.*l"file7我们变得很小,很傻,我们也得到Shaneisalittletoplayball。但是为什么我们得到的Shane是有点打球的呢?我们只是在搜索中寻找单词,为什么我们得到整个句子作为我们的输出。这是因为它符合我们的搜索条件,即以字母s开头,中间有任意数量的字符,以字母l结尾。那么,我们可以做些什么来纠正我们的正则表达式,只得到单词而不是整个句子作为我们的输出。我们需要添加?元字符到正则表达式$grep"S.*?l"file7这将纠正我们的正则表达式的行为。\\当我们需要包含元字符或对正则表达式具有特殊含义的字符时使用。例如,我们需要找到所有以点结尾的单词,所以我们可以使用:$grep"S.*\\."file8这将查找并匹配所有以点字符结尾的单词。通过这个基本的正则表达式教程,我们现在对正则表达式的工作原理有了一些基本概念。在我们的下一个教程中,我们将学习一些高级正则表达式概念。还要尽可能多地练习,创建正则表达式并尝试尽可能多地将它们合并到您的工作中。如果您有任何疑问或问题,可以在下方评论区留言。
