电子说
正则表达式是用来表达字符串匹配模式的方法,利用正则表达式,可以让我们轻易地实现对目标字符串的 查找 、 删除 、替换等操作。
正则表达式并不复杂,它并不包含难以理解的理论,只是一些约定好的匹配规则,但由于规则较多,可能比较容易忘记。
本文会先整理出所有的正则表达式以及其含义,接下来会利用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文件内容如下图所示:
grep one regular.txt
命令的执行结果如下所示:
默认条件下,grep命令会把包含“one”的行都检索出来。但如果你只想检索以“one”开头的行,要使用如下命令:
grep ^one regular.txt
其执行结果如下图所示:
可以看到只有以“one”开头的行被检索出来了,那种虽然包含“one”,但并不以“one”开头的行不会被检索到。
$
表示只查询以某个关键字结尾的行:
默认条件下,grep命令会把包含“three”的行都检索出来。但使用$
后,只有以“three”结尾的行会被检索到。
.
表示一定匹配且仅匹配一个字符。在regular.txt
文件中,包含下面几行:
taste
tst
tesst
test
但执行grep t.st regular.txt
命令时,只有taste和test两行内容会被检索出来:
这是因为.
一定匹配一个任意字符,所以只有taste和test两行内容满足要求。
*
表示重复任意次前面的表达式,包括0次和无穷次。
grep go* regular.txt
命令执行结果如下:
g
、go
、goo
、goo...
等字符串都会被检索到。
匹配中括号中的任意一个字符,注意“[]”表达式只表示一个字符,中括号内的字符之间是“或”的关系。
grep t[ea] regular.txt
命令执行结果如下:
tst
字符串就没有被检索到,因为s不在[ea]
范围内。
这是对[list]
的简写形式,在处理连续字符集时很有效。
例如,想要列出所有的小写字母,你可以用“[abcdefg...xyz]”来表达,但这样输入太多,比较麻烦。
由于小写字母是连续的,所以可以用[a-z]
表示所有的小写字母。
grep t[a-z] regular.txt
执行结果如下所示:
同理,[A-Z]
表示所有大写字母,[0-9]
表示所有数字。
当^
出现在中括号内时,它表达“取反”的含义。
下面是[list]
形式使用^
符号的前后结果对比:
下面是[n1-n2]
形式使用'^'符号的前后结果对比:
这三种表达式本质上是一类表达式,都是表示前面表达式重复的次数。
go\\{4\\}
表示字母g
后面必须跟着4个字母o
:
go\\{4,6\\}
表示字母g
后面跟着4个字母o
到6个字母o
的字符串都是匹配的:
go\\{4,\\}
表示字母g
后面跟着4个字母o
或超过4个字母o
的字符串都是匹配的:
这里要注意,grep在使用\\{n,m\\}
表达式时,表达式内容必须用单引号'
或双引号"
扩起来。其它情况可以不使用双引号或单引号。
\\
是转义字符,当你要检索某些特殊字符时,就需要使用它。
例如,下面检索包含单引号的行:
这里如果不使用\\
,将无法正常执行命令:
—————END—————
技术人江湖互联网技术分享,Elasticsearch系列教程
67篇原创内容
公众号
收录于合集 **#**linux
12个
上一篇Linux必知必会10:环境变量设置方式及原理
全部0条评论
快来发表一下你的评论吧 !