文章目录
四、shell编程之正则表达式与文本处理器
一、正则表达式
1.主要用来匹配字符串(命令结果,文本内容)
通配符匹配文件(而且是已存在的文件)
基本正则表达式
扩展正则表达式
-
. 表示任意一个字符
-
[]取其中一个
-
[^]排除
[root@localhost ~]# echo abc |grep a.c //表示原来的点需要加\转义
abc
[root@localhost ~]# echo abc |grep 'a\.c' ==//标准格式需要加'' 或者""==
[root@localhost ~]# ls |grep '[zhou].txt' // 匹配[]中任意一个字符
h.txt
o.txt
u.txt
z.txt
[root@localhost ~]# ls |grep '[^a-z].txt' //显示非小写字母
A.txt
B.txt
2.表示次数
- #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
- .*#任意长度的任意字符
- ?#匹配其前面的字符出现0次或1次,即:可有可无
- +#匹配其前面的字符出现最少1次,即:肯定有且 >=l次
- {n}#匹配前面的字符n次
- {m,n}#匹配前面的字符至少m次,至多n次
- {,n}#匹配前面的字符至多n次,<=n
- /{n,} #匹配前面的字符至少n次
[root@localhost ~]# echo google |grep 'go\{2\}gle' \\带表前面的o出现2次
google
[root@localhost ~]# echo gooooogle |grep 'go\{2,\}gle' \\带表前面的o出现2次以上
gooooogle
[root@localhost ~]# echo gooooogle |grep 'go\{2,5\}gle'\\带表前面的o出现2次以上5次以下
gooooogle
[root@localhost ~]# echo goooooogle |grep 'go*gle' \\表示0次到任意次
goooooogle
[root@localhost ~]# echo gggle |grep "go*gle" \\grep 包含最前面的g不匹配
gggle
[root@localhost ~]# echo gdadadadgle |grep "g.*gle" \\.*代表任意匹配所有
gdadadadgle
[root@localhost ~]# echo ggle |grep "go\?gle" \\ \?一次或者0次
ggle
[root@localhost ~]# echo gogle |grep "go\?gle"
gogle
[root@[root@localhost ~]# echo google |grep "go\+gle" \\一个以上
google
3.位置锚定
^#行首锚定,用于模式的最左侧,
$#行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行 (单独一行)
^$#空行
^[[ :space: ]]*$#空白行
\<或\b #词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部
\>或\b #词尾锚定,用于单词模式的右侧
#匹配整个单词
[root@localhost ~]# echo hello-123|grep "\<123" 123高亮
hello-123
[root@localhost ~]# echo hello-123|grep "hello\>" hello高亮
hello-123
[root@localhost ~]# grep "^[^#]" /etc/fstab 非#开头的
q
/dev/mapper/centos-root / xfs defaults 0 0
UUID=0cebec14-3506-411d-8257-667162fdb74d /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-var /var