Bash 脚本:正则表达式基础篇

正则表达式(简写为 regex 或者 regexp)基本上是定义一种搜索模式的字符串,可以被用来执行“搜索”或者“搜索并替换”操作,也可以被用来验证像密码策略等条件。

编译自 | http://linuxtechlab.com/bash-scripting-learn-use-regex-basics/

作者 | Shusain

译者 | kimii

正则表达式Regular expressions(简写为 regex 或者 regexp)基本上是定义一种搜索模式的字符串,可以被用来执行“搜索”或者“搜索并替换”操作,也可以被用来验证像密码策略等条件。

正则表达式是一个我们可利用的非常强大的工具,并且使用正则表达式的优点是它能在几乎所有计算机语言中被使用。所以如果你使用 Bash 脚本或者创建一个 python 程序时,我们可以使用正则表达式,或者也可以写一个单行搜索查询。

在这篇教程中,我们将会学习一些正则表达式的基本概念,并且学习如何在 Bash 中通过 使用它们,但是如果你希望在其他语言如 python 或者 C 中使用它们,你只能使用正则表达式部分。那么让我们通过正则表达式的一个例子开始吧,

正则表达式看起来像 这个样子。

但这是什么意思呢?它意味着所提到的正则表达式将寻找一个词,它以 开始,在中间包含字母 中任意一个,并且字母 最为最后一个字符。它可以是 , 或者 ,可以匹配一个单独的词或者其它单词像 , 或者 的一部分。

grep 使用正则表达式的语法是

如果不理解,不要担心,这只是一个例子,来展示可以利用正则表达式获取什么,相信我,这是最简单的例子。我们可以从正则表达式中获取更多。现在我们将从正则表达式基础的开始。

◈ 推荐阅读:你应该知道的有用的 linux 命令

[1]

基础的正则表示式

现在我们开始学习一些被称为元字符MetaCharacters的特殊字符。它们可以帮助我们创建更复杂的正则表达式搜索项。下面提到的是基本元字符的列表,

◈ 点将匹配任意字符

◈ 将匹配一个字符范围

◈ 将匹配除了括号中提到的那个之外的所有字符

◈ 将匹配零个或多个前面的项

◈ 将匹配一个或多个前面的项

◈ 将匹配零个或一个前面的项

◈ 将匹配 n 次前面的项

◈ 将匹配 n 次或更多前面的项

◈ 将匹配在 n 和 m 次之间的项

◈ 将匹配少于或等于 m 次的项

◈ 是一个转义字符,当我们需要在我们的搜索中包含一个元字符时使用

现在我们将用例子讨论所有这些元字符。

(点)

它用于匹配出现在我们搜索项中的任意字符。举个例子,我们可以使用点如:

这个正则表达式意味着我们在名为 ‘file1’ 的文件中查找的词以 开始,以 结尾,中间可以有 1 个字符的字符串。同样,我们可以使用任意数量的点作为我们的搜索模式,如 ,这个查询项将查找一个词,以 开始,以 结尾,并且中间可以有任意 6 个字符。

方括号用于定义字符范围。例如,我们需要搜索一些特别的单词而不是匹配任何字符,

这里,我们正寻找一个单词,以 开头,以 结尾,并且中间只能有 、 或者 中的一个。 在方括号中我们可以提到单个到任意数量的字符。

我们在方括号中也可以定义像 或者 作为匹配字符的列表。

这就像正则表达式的 not 操作。当使用 时,它意味着我们的搜索将包括除了方括号内提到的所有字符。例如,

这意味着我们可以拥有所有这样的单词,它们以 开始,以字母 结尾,并且不得包含从 到 的任何数字。

到现在为止,我们只使用了仅需要在中间查找单个字符的正则表达式的例子,但是如果我们需要更多字符该怎么办呢。假设我们需要找到以一个字符开头和结尾的所有单词,并且在中间可以有任意数量的字符。这就是我们使用乘数元字符如 与 的地方。

、、 或者 也是可以在我们的正则表达式项中使用的其他乘数元字符。

(星号)

以下示例匹配字母 的任意出现次数,包括一次没有:

它意味着我们可以匹配到 、 或者 。

以下模式要求字符串中的字母 至少被匹配到一次:

这里 在我们的搜索中至少需要发生一次,所以我们的结果可以为 或者 ,但不能是 。

在以下模式匹配中

匹配字符串 或 ,使用 乘数,我们可以有一个或零个字符的出现。

非常重要的提示

当使用乘数时这是非常重要的,假设我们有一个正则表达式

我们得到的结果是 、,并且我们也得到了 。但是为什么我们得到了 ?我们只是在搜索中寻找单词,为什么我们得到了整个句子作为我们的输出。

这是因为它满足我们的搜索标准,它以字母 开头,中间有任意数量的字符并以字母 结尾。那么,我们可以做些什么来纠正我们的正则表达式来只是得到单词而不是整个句子作为我们的输出。

我们在正则表达式中需要增加 元字符,

这将会纠正我们正则表达式的行为。

是当我们需要包含一个元字符或者对正则表达式有特殊含义的字符的时候来使用。例如,我们需要找到所有以点结尾的单词,所以我们可以使用:

这将会查找和匹配所有以一个点字符结尾的词。

通过这篇基本正则表达式教程,我们现在有一些关于正则表达式如何工作的基本概念。在我们的下一篇教程中,我们将学习一些高级的正则表达式的概念。同时尽可能多地练习,创建正则表达式并试着尽可能多的在你的工作中加入它们。如果有任何疑问或问题,您可以在下面的评论区留言。

via:http://linuxtechlab.com/bash-scripting-learn-use-regex-basics/

作者:SHUSAIN

[3]

译者:kimii校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

LCTT 译者

kimii

共计翻译:4篇

贡献时间:29 天

本文来自企鹅号 - Linux中国媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏积累沉淀

linux shell函数定义和调用

说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自...

33070
来自专栏web开发

Mac系统的终端显示git当前分支

当我第一次在mac系统下使用git的时候,发现一个问题,git默认是不显示当前所在的分支名称,然后网上查找资料,找到了解决办法,终于可以显示本地当前分支,现在分...

50050
来自专栏地方网络工作室的专栏

Shell 命令行,实现一个获取任意位数的随机密码的脚本

Shell 命令行,实现一个获取任意位数的随机密码的脚本 每次我们想要获得一个密码的时候都很头疼,于是我之前自己用nodejs写了一个 Shell 脚本。这两天...

23560
来自专栏地方网络工作室的专栏

Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件

Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件 前面我写了一篇博文Shell 从日志文件中选择时间段内的日志输出到另一个文件,利用循环实现...

20470
来自专栏三丰SanFeng

history命令使用方法详解

history是一条非常实用的shell命令,可以显示出之前在shell中运行的命令,配合last显示之前登录的用户,就可以追溯是哪个用户执行了某些命令。以下详...

21470
来自专栏IMWeb前端团队

bash 的条件和循环

本文作者:IMWeb 江源 原文出处:IMWeb社区 未经同意,禁止转载 原文 条件语句和循环可以统称为流程控制,是一门语言最基础的部分。 bash ...

19660
来自专栏Fish

用IntelliJ IDEA提交pyspark程序

最近要用python写spark程序。因为idea如此强大,因此要写一个如何在idea上提交pyspark程序。 安装python组件 不管怎么样,想要在ide...

568100
来自专栏地方网络工作室的专栏

Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本

Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本 在 mac 或者 linux 系统中,我们的浏览器或者其他下载软件下载的文件全...

329100
来自专栏猿人谷

使用bash编写Linux shell脚本--调试和版本控制

当我还在布鲁克大学上学的时候, Macquarium 实验室中充满了苹果公司的 Macintosh Plus 电脑。一天,我在为第三年的操作系统课程准备一个程序...

567110
来自专栏大数据智能实战

HIVE备份之批量导出所有的HIVE建表字段

在HIVE实际工程部署当中,经常会用到一些备份,其中有一项就是如何保存所有HIVE表的建表命令语句。 当HIVE中表格特别多的情况下,如何批量进行存储呢。 针对...

24950

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励