Shell之(正则表达式)

发布于:2024-05-17 ⋅ 阅读:(142) ⋅ 点赞:(0)

目录

一、正则表达式的概括

常用选项 

 基础正则表达式

查看以xxx为开头    查看以xxx为结尾的文件内容 

匹配单个或多个字符 

 匹配中括号里的内容

 对子表达式进行多次或者限定次数的匹配 

拓展正则表达式的基本用法 

扩展元字符

+ 匹配+前面的字符或表达式至少1次(大于等于1次{1,})

? 匹配?前面的字符或表达式0次或1次({0,1})

()  将()里面的表达式作为一个整体 

| 以或的方式匹配字符串 


一、正则表达式的概括

正则表达式是由普通字符与元字符组成:

  • 普通字符 包括大小写字母、数字、标点符号及一些其他符号
  • 元字符 是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式
  • 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式.

通配符:作用范围 匹配文件/目录名

正则表达式:匹配文件内容,用于精确筛选信息,可以配合grep,egrep,awk,sed命令进行搭配使用,查找时,也比通配符更加精确

常用选项 

 基础正则表达式

(支持的工具:grep、egrep、sed、awk) 

查看以xxx为开头    查看以xxx为结尾的文件内容 
[root@localhost ~]# grep '^1' zzz.txt   #过滤出1开头的

[root@localhost ~]# grep '3$' zzz.txt   #过滤出3结尾的 

匹配单个或多个字符 
[root@localhost ~]# grep 'q.e' 1.sh      #. 代表除了\n意外的任意字符

[root@localhost ~]# grep 'q.*e' 1.sh   #.* 匹配任意字符大于等于0次(这里代表q任意字符任意长度e)

 匹配中括号里的内容

[xxx]匹配中括号里的列表中的任意一个字符
 
[xxx]*匹配中括号里的列表中任意字符大于等于0次

[root@localhost ~]# grep "1[2]" 5.sh

[root@localhost ~]# grep "1[1234567890]" 5.sh

 

 [^xxx]匹配除了中括号里的列表中的任意一个字符
[^0-9]匹配所有非数字的字符 
[^a-zA-Z]匹配所有非大小写字母的字符

[root@localhost ~]# grep "[^24680]" 5.sh   #匹配除了中括号里的列表中的任意一个字符

 对子表达式进行多次或者限定次数的匹配 

\{n\}匹配{n}前面的字符或表达式 n 次;grep必须加\;egrep不用加\.

使用grep必须使用两个\\ 

[root@localhost ~]# grep "go\{2\}d" 5.sh

[root@localhost ~]# grep "go[ola]\{2\}d" 5.sh

 

 

\{n,\}匹配{n}前面的字符或表达式至少 n 次(>=n次)
 
\{n,m\} 匹配{n}前面的字符或表达式 n至m 次(大于等于n次且小于等于m次)
 
grep必须加\;egrep不用加\.

[root@localhost ~]# grep "go\{2,\}d" 5.sh    #最少匹配两次,包含两次

[root@localhost ~]# grep "go\{2,4\}d" 5.sh   #至少匹配两次,最多四次

 

拓展正则表达式的基本用法 

支持awk和egrep使用,如果grep和sed想要正常使用(grep -E  sed -r)

元字符 作用含义
+ 匹配前面子表达式1次及以上
匹配前面子表达式0次或者1次
() 将括号中的字符串作为一个整体
| 以"或"的方式匹配字符串

使用egrep不用加反斜杠;egrep等于grep -E 

 

\w :匹配包括下划线的任何单词字符。
 
\W :匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
 
grep需搭配-P使用 

[root@localhost ~]# grep -P "go\wd" 5.sh

 

 \d :匹配一个数字字符。
 
\D :匹配一个非数字字符。等价于 [^0-9]。        
 
grep需搭配-P使用

 

\s :空白符。
 
\S :非空白符
 
grep需搭配-P使用 

[root@localhost ~]# grep -P "go\Sd" 5.sh

扩展元字符

(支持的工具:egrep、awk     )grep -E   sed -r

+ 匹配+前面的字符或表达式至少1次(大于等于1次{1,})
[root@localhost ~]# grep -E "go+d" 5.sh

[root@localhost ~]# grep -E "go{1,}d" 5.sh

 

? 匹配?前面的字符或表达式0次或1次({0,1})
[root@localhost ~]# grep -E "goo?d" 5.sh

[root@localhost ~]# grep -E "goo{0,1}d" 5.sh

 

()  将()里面的表达式作为一个整体 
[root@localhost ~]# grep -E "g(oo)*d" 5.sh

| 以或的方式匹配字符串 
[root@localhost ~]# grep -E "g(oa|ol|la|oo)d" 5.sh


网站公告

今日签到

点亮在社区的每一天
去签到