专题(十九)Linux 下的正则表达式

一、作用与介绍

  • 正则表达式通常用于判断语句中,用来检查某一字符串是否满足某一格式
  • 正则表达式是由普通字符与元字符组成
    • 普通字符:包括大小写字母、数字、标点符号及一些其它符号
    • 元字符:是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式
  • Linux 中常用的有两种正则表达式引擎
    • 基础正则表达式:BRE
    • 扩展正则表达式:ERE
  • 使用到正则表达式的Linux 工具
    • grep
    • sed
    • awk
    • egrep

二、基础正则表达式常见元字符

1、特殊字符

特殊字符 用法说明 举例说明 备注
\ 转义符,对特殊字符进行转义,将特殊字符当作普通字符进行匹配 a\.b  匹配上的字符为 a.b  
\+ 匹配其前面的字符出现最少1次,即:肯定有且>=1次    
^ 匹配指定字符开头的行 ^tux  匹配以 tux 开头的行  
$ 匹配已指定字符结尾的行 tux$  匹配以 tux 字符串结尾的行  
. 匹配除换行符\r\n之外的任意单个字符    
[] 匹配列表中的一个字符 a[0-9]b  能够匹配上axb字符串,其中x是0-9中的任意一个数字    
[^ ] 匹配任意不在列表中的一个字符 a[^0-9]b 能够匹配上axb字符串,其中x不是0-9中的任意一个数字    
* 匹配前面子表达式0次或者多次  goo*d  能够匹配上 good、goood、gooood 等  
\{n\} 匹配前面的子表达式n次 [O-9]\{2\}   匹配两位数字  
\{n,\} 匹配前面的子表达式不少于n次 [0-9]\{2,\}   匹配两位及两位以上数宁  
\{n,m\} 匹配前面的子表达式n到m次 [0-9]\{2,3\}  匹配两位到三位数字  

注: egrep、awk使用{n}、{n, }、{n, m}匹配时“{}"前不用加"\”

2、定位符

特殊字符 用法说明 举例说明 备注
^ 匹配输入字符串开始的位置    
$ 匹配输入字符串结尾的位置    

 

3、非打印字符

特殊字符 用法说明 举例说明 备注
\n 匹配一个换行符 echo -e "hello\n"

输出结果为:

hello

 

\r 匹配一个回车符    
\t 匹配一个制表符 echo -e "hello\tworld"

输出结果为:

hello  world

 

三、扩展正则表达式

  简化表达式,如:使用基础正则表达式查询除文件中空白行与行首为“#”之外的行(通常用于查看生效的配置文件),执行“grep -v‘^$’test.txt | grep -v‘^#’”即可实现。这里需要使用管道命令来搜索两次。如果使用扩展正则表达式, 可以简化为“egrep -v ‘^$|^#’ test.txt”,其中,单引号内的管道符号表示或者(or)。

1、可以使用扩展正则表达式的工具

  • grep -E 
  • egrep
  • awk -E

2、常见的扩展正则表达式的元字符

特殊字符 用法说明 举例说明 备注
+ 重复一个或者一个以上的前一个字符 egrep -n 'wo+d' test.txt   即可查询"wood" "woood" "woooooood"等字符串  
? 零个或者一个的前一个字符 egrep -n 'bes?t' test.txt   查询“bet”“best”这两个字符串  
| 使用或者(or)的方式找出多个字符 egrep -n 'of|is|on' test.txt  查询"of"或者"if"或者"on"字符串  
()  查找“组”字符串,()构成一个子表达式 egrep -n 't(a|e)st' test.txt   可查询"tast"或者"test"字符串  “tast”与“test”因为这两个单词的“t”与“st”是重复的,所以将“a”与“e”列于“()”符号当中,并以“|”分隔,即可查询"tast"或者"test"字符串
()+  辨别多个重复的组 egrep -n 'A(xyz)+C' test.txt   该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思 可以匹配上 AxyzC 、AxyzxyzC、AxyzxyzxyzC 等字符串

 

 

 

posted @ 2024-10-18 15:46  夏之夜  阅读(178)  评论(0)    收藏  举报