Linux入门之正则表达式

电子说

1.3w人已加入

描述

正则表达式是用来表达字符串匹配模式的方法,利用正则表达式,可以让我们轻易地实现对目标字符串的 查找删除替换等操作。

正则表达式并不复杂,它并不包含难以理解的理论,只是一些约定好的匹配规则,但由于规则较多,可能比较容易忘记。

本文会先整理出所有的正则表达式以及其含义,接下来会利用grep命令,详细介绍每种正则表达式的使用方式,并给出案例。

如果大家忘记了某个匹配规则的话,相信你只要再看一遍下方整理好的表格,就能回忆起其使用方法。

正则表达式规则

下方表格整理了常用正则表达式的匹配规则:

表达式 含义
^word 匹配关键字出现在行首的行下面命令查询以Hello开头的行grep ^Hello regular.txt
word** 匹配关键字出现在行尾的行下面命令查询以 complete 结尾的行grep complete**regular.txt
. 一定存在某个字符例如a.c可以匹配abc,acc,adc,aec等字符串
\\ 转义符,去掉特殊符号的特殊含义下面的命令查找含有单引号'的行grep \\' regular.txt
* 匹配0个或无穷多个前面的表达式下面命令查找es,ess,esss,esss...等字符串grep ess* regular.txt
[list] 匹配中括号中的一个字符例如,t[ae]st既能匹配test,也能匹配tast
[n1-n2] [list]的简写形式,匹配两个字符之间的所有连续字符例如,[A-Z]匹配所有的大写字符,[0-9]匹配0和9之间的任意一个数字
[^list]或[^n1-n2] 中括号中的^是取反的意思,它表示只要一行包含有非list中列出的任意字符,就会被匹配例如,下面命令查找包含有非大写字符的行grep [^A-Z] regular.txt
{n} 匹配n个前面的表达式
{n, m} 匹配连续n到m个前面的表达式
{n,} 匹配连续n个或以上个前面的表达式

下面将使用grep命令演示各个表达式的执行效果,测试使用的regular.txt文件内容如下图所示:

Linux

^word

grep one regular.txt命令的执行结果如下所示:

Linux

默认条件下,grep命令会把包含“one”的行都检索出来。但如果你只想检索以“one”开头的行,要使用如下命令:

grep ^one regular.txt

其执行结果如下图所示:

Linux

可以看到只有以“one”开头的行被检索出来了,那种虽然包含“one”,但并不以“one”开头的行不会被检索到。

word$

$表示只查询以某个关键字结尾的行:

Linux

默认条件下,grep命令会把包含“three”的行都检索出来。但使用$后,只有以“three”结尾的行会被检索到。

小数点 .

.表示一定匹配且仅匹配一个字符。在regular.txt文件中,包含下面几行:

taste
tst
tesst
test

但执行grep t.st regular.txt命令时,只有taste和test两行内容会被检索出来:

Linux

这是因为.一定匹配一个任意字符,所以只有taste和test两行内容满足要求。

星号 *

*表示重复任意次前面的表达式,包括0次和无穷次。

grep go* regular.txt命令执行结果如下:

Linux

ggogoogoo...等字符串都会被检索到。

[list]

匹配中括号中的任意一个字符,注意“[]”表达式只表示一个字符,中括号内的字符之间是“或”的关系。

grep t[ea] regular.txt命令执行结果如下:

Linux

tst字符串就没有被检索到,因为s不在[ea]范围内。

[n1-n2]

这是对[list]的简写形式,在处理连续字符集时很有效。

例如,想要列出所有的小写字母,你可以用“[abcdefg...xyz]”来表达,但这样输入太多,比较麻烦。

由于小写字母是连续的,所以可以用[a-z]表示所有的小写字母。

grep t[a-z] regular.txt执行结果如下所示:

Linux

同理,[A-Z]表示所有大写字母,[0-9]表示所有数字。

[^list] 或 [^n1-n2]

^出现在中括号内时,它表达“取反”的含义。

下面是[list]形式使用^符号的前后结果对比:

Linux

下面是[n1-n2]形式使用'^'符号的前后结果对比:

Linux

, ,

这三种表达式本质上是一类表达式,都是表示前面表达式重复的次数。

go\\{4\\}表示字母g后面必须跟着4个字母o:

Linux

go\\{4,6\\}表示字母g后面跟着4个字母o到6个字母o的字符串都是匹配的:

Linux

go\\{4,\\}表示字母g后面跟着4个字母o或超过4个字母o的字符串都是匹配的:

Linux

这里要注意,grep在使用\\{n,m\\}表达式时,表达式内容必须用单引号'或双引号"扩起来。其它情况可以不使用双引号或单引号。

反斜杠 \\

\\是转义字符,当你要检索某些特殊字符时,就需要使用它。

例如,下面检索包含单引号的行:

Linux

这里如果不使用\\,将无法正常执行命令:

Linux

—————END—————

Linux

技术人江湖互联网技术分享,Elasticsearch系列教程

67篇原创内容

公众号

收录于合集 **#**linux

12

上一篇Linux必知必会10:环境变量设置方式及原理

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分