Linux之shell脚本的正则表达式

一、正则表达式

  • 通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符
[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



### 1.3位置锚定

^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行 (单独一行 只有root)
^$ #空行
[1]*$ # 空白行

< 或 \b   #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
> 或 \b        #词尾锚定,用于单词模式的右侧
<PATTERN>     #匹配整个单词


  1. [:space:] ↩︎

posted @ 2023-08-13 19:22  德国南部之星  阅读(80)  评论(0)    收藏  举报