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 :词尾锚定,用于单词模式的右侧
  • \<PATTERN\> :匹配整个单词

分组

  • \(\) :将一个或多个字符捆绑在一起,当作一个整体进行处理

    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 :词尾锚定,用于单词模式的右侧
  • \<PATTERN\> :匹配整个单词

分组

  • () :将一个或多个字符捆绑在一起,当作一个整体进行处理

    Note:分组括号中的模式匹配到的内容(不是元字符本身)会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …

  • \1 :从左侧起,第一个左括号及与之匹配右括号之间的模式所匹配到的整体
  • \2 :从左侧起,第二个左括号及与之匹配右括号之间的模式所匹配到的整体

如: (ab+(xy)*)

\1 所匹配的是: (ab+(xy)*)
\2 所匹配的是: (xy)

或者

  • | :左边或者右边,不是按字符,是按整个字段
  • a|b :a或者b
  • a|Abc :a或者Abc
  • (a|A)bc :abc或者Abc

专用字符集合

可以使用 man 7 glob 查看,grep和glob通用。

常用字符集合:

  • [:digit:] :任意数字,相当于 0-9
  • [:lower:] :任意小写字母
  • [:upper:] :任意大写字母
  • [:alpha:] :任意大小写字母
  • [:alnum:] :任意数字或字母
  • [:space:] :空格字符
  • [:punct:] :标点符号

注意用法:

1
[hzz@e25f88eebde1 ~]$ ls -d /var/l*[0-9]*[[:lower:]]

字符集需要放入中括号内。