glob 及 grep 正则表达式简介
简介
命题的正确解读应为 glob | 及 | grep正则表达式 | 简介
,因为 glob 通配符并不能算是正则表达式,放在一起只是因为它们的作用相似。
正则表达式(Regual Expression),由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能。这类特殊字符也就是接下来要详解的字符叫元字符。
glob 通配符
glob 通配符是 Linux 内建的一种函数,用来实现同时操作多个文件(文件名通配)。
通配符类型
*
:任意长度的字符?
:任意单个字符[]
:匹配指定范围内的单个字符[0-9]
:单个数字[a-z]
:不区分大小写[A-Z]
:大写字符[^]
:匹配指定范围外的单个字符
grep
grep(Global search REgular expression and Print out the line)是一种文本搜索工具,根据用户指定的模式(过滤条件)对目标文本逐行进行匹配检查,打印匹配到的行。
常用模式
grep
:支持基本正则表达式egrep
:支持扩展正则表达式fgrep
:不支持正则表达式
常用选项
--color=auto
:对匹配到的文本着色显示-v
:显示不能够被pattern匹配到的行-i
:忽略字符大小写-o
:仅显示匹配到的字符串-q
:静默模式,不输出任何信息-P
:支持perl的正则表达式-A
:after, 后n行-B
:before, 前n行-C
:context, 前后各n行
基本正则表达式
字符匹配
.
:匹配任意单个字符[]
:匹配指定范围内的任意单个字符[^]
:匹配指定范围外的任意单个字符
匹配次数
用在要指定次数的字符后面,用于指定前面的字符要出现的次数。
*
:匹配前面的字符任意次.*
:任意长度的任意字符\?
:匹配其前面的字符0或1次\+
:匹配其前面的字符至少1次\{m\}
:匹配前面的字符m次\{m,n\}
:匹配前面的字符至少m次,至多n次\{m,\}
:匹配前面的字符至少m次\{0,n\}
:匹配前面的字符至多n次
位置锚定
^
:行首锚定,用于模式的最左侧$
:行尾锚定,用于模式的最后侧^PATTERN$
:用于模式匹配整行\<
或\b
:词首锚定,用于单词模式的左侧\>
或\b
:词尾锚定,用于单词模式的右侧\
:匹配整个单词
分组
\(\)
:将一个或多个字符捆绑在一起,当作一个整体进行处理 Note:分组括号中的模式匹配到的内容(不是元字符本身)会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...\1
:从左侧起,第一个左括号及与之匹配右括号之间的模式所匹配到的整体\2
:从左侧起,第二个左括号及与之匹配右括号之间的模式所匹配到的整体
如: (ab+(xy)*)
\1
所匹配的是: (ab+(xy)*)
\2
所匹配的是: (xy)
egrep
相当于 grep -E
,使用扩展正则表达式。
扩展正则表达式
字符匹配
.
:匹配任意单个字符[]
:匹配指定范围内的任意单个字符[^]
:匹配指定范围外的任意单个字符
匹配次数
用在要指定次数的字符后面,用于指定前面的字符要出现的次数。
*
:匹配前面的字符任意次.*
:任意长度的任意字符?
:匹配其前面的字符0或1次+
:匹配其前面的字符至少1次{m}
:匹配前面的字符m次{m,n}
:匹配前面的字符至少m次,至多n次{m,}
:匹配前面的字符至少m次{0,n}
:匹配前面的字符至多n次
位置锚定
^
:行首锚定,用于模式的最左侧$
:行尾锚定,用于模式的最后侧^PATTERN$
:用于模式匹配整行\<
或\b
:词首锚定,用于单词模式的左侧\>
或\b
:词尾锚定,用于单词模式的右侧\
:匹配整个单词
分组
()
:将一个或多个字符捆绑在一起,当作一个整体进行处理 Note:分组括号中的模式匹配到的内容(不是元字符本身)会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...\1
:从左侧起,第一个左括号及与之匹配右括号之间的模式所匹配到的整体\2
:从左侧起,第二个左括号及与之匹配右括号之间的模式所匹配到的整体
如: (ab+(xy)*)
\1
所匹配的是: (ab+(xy)*)
\2
所匹配的是: (xy)
或者
|
:左边或者右边,不是按字符,是按整个字段a|b
:a或者ba|Abc
:a或者Abc(a|A)bc
:abc或者Abc
专用字符集合
可以使用 man 7 glob
查看,grep和glob通用。
常用字符集合:
[:digit:]
:任意数字,相当于 0-9[:lower:]
:任意小写字母[:upper:]
:任意大写字母[:alpha:]
:任意大小写字母[:alnum:]
:任意数字或字母[:space:]
:空格字符[:punct:]
:标点符号
注意用法:
[hzz@e25f88eebde1 ~]$ ls -d /var/l*[0-9]*[[:lower:]]
字符集需要放入中括号内。