Linux之shell脚本的正则表达式

德国南部之星 / 2023-08-13 / 原文

目录
  • 一、正则表达式
    • 1.1 元字符
    • 1.2 表示次数

一、正则表达式

  • 通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符
[localhost ~]#man 7 regex
#可以使用man手册帮助

1.1 元字符

.   匹配任意单个字符,可以是一个汉字  
[]   匹配指定范围内的任意单个字符,示例:[zhou]   [0-9]   []   [a-z A-Z]   [:alpha:]
[^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]
[root@localhost ~]#ls /etc/|grep rc[.0-6]
#此处的点代表字符

[root@localhost ~]#ls /etc/ | grep 'rc\.'
#点值表示点需要转义

[root@localhost ~]# grep r..t /etc/passwd         
#r..t ..代表任意两个字符

[root@localhost ~]# echo abc |grep a.c              
#表示原来的点需要加\转义

[root@localhost ~]# echo abc |grep a\.c
#不加引号有时匹配会有出入

[root@localhost ~]# echo abc |grep 'a\.c'          
#标准格式需要加'' 或者""

[root@localhost ~]# ls |grep '[zhou].txt'    
#匹配[]中任意一个字符

[root@localhost ~]# ls [a-d].txt                
#通配符

[root@localhost ~]# ls |grep '[a-d].txt'             
#真正的小写在正则表达式中

[root@localhost ~]# ls |grep '[^a-z].txt'   
#显示非小写字母

[root@localhost ~]# ls |grep '[^a.z].txt'     
#[]里就是本意不需要转义

1.2 表示次数

*        #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.*       #任意长度的任意字符,不包括0次
\?       #匹配其前面的字符出现0次或1次,即:可有可无
\+       #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\}    #匹配前面的字符n次
\{m,n\}  #匹配前面的字符至少m次,至多n次
\{,n\}   #匹配前面的字符至多n次,<=n
\{n,\}   #匹配前面的字符至少n次
示例
[root@localhost ~]#echo 2452450982 | grep '[0-9]\{5,12\}'   #过滤QQ号
2452450982


[root@localhost ~]#ifconfig ens33 | grep netmask    #匹配子网掩码
        inet 192.168.8.100  netmask 255.255.255.0  broadcast 192.168.8.255
[root@localhost ~]#ifconfig ens33 | grep netmask | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+'    #匹配地址
192.168.8.100
255.255.255.0
192.168.8.255
[root@localhost ~]#ifconfig ens33 | grep netmask | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+' | head -1   #匹配IP地址
192.168.8.100


[root@localhost ~]#ifconfig ens33 | grep netmask | tr -s ' ' | cut -d ' ' -f3  #匹配IP地址
192.168.8.100


[root@localhost ~]#cat /etc/fstab | grep -o '\b[[:alpha:]]\+\b' | wc -l  #匹配单词数
46


[root@localhost ~]#cat /etc/fstab | grep -v '^$' | gr