正则表达式及扩展正则

grep:

Linux上文本处理三剑客

grep:文本过滤(模式:pattern)工具;

grep, egrep, fgrep

sed:stream editor,文本编辑工具;

awk:Linux上的实现gawk,文本报告生成器;

grep: Global search REgular expression and Print out the line.

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;

模式:由正则表达式字符及文本字符所编写的过滤条件;
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能;
分两类:

基本正则表达式:BRE
扩展正则表达式:ERE

grep -E, egrep

正则表达式引擎
	grep [OPTIONS] PATTERN [FILE...]
	选项:
		--color=auto: 对匹配到的文本着色显示;
		-v: 显示不能够被pattern匹配到的行;
		-i: 忽略字符大小写;
		-o: 仅显示匹配到的字符串;
		-q: 静默模式,不输出任何信息;
		-A #:after, 后#行
		-B #: before, 前#行
		-C #:context, 前后各#行

		-E:使用ERE;
  • 基本正则表达式元字符:

    • 字符匹配:
    字符匹配 涵义
    . 匹配任意单个字符
    [] 匹配指定范围内的任意单个字符
    [^] 匹配指定范围外的任意单个字符
    • 字符集:
    字符集 对应
    [:digit:] 任何数字
    [:lower:] 任何小写字母
    [:upper:] 任何大写字母
    [:alpha:] 任何字母
    [:alnum:] 任何字母和数字
    [:punct:] 任何标点符号
    [:space:] 任何空白字符
    • 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;
    次数匹配 作用
    * 匹配前面的字符任意次
    ? 0或1次
    + 1次或多次
    m 匹配m次
    m,n 至少m,至多n次
    *:匹配前面的字符任意次;
    	例如: grep "x*y" 
    		abxy
    		xay
    		xxxxxxy
    
    • 贪婪模式
    匹配规则 作用
    .* 任意长度的任意字符
    ? 匹配其前面的字符0或1次;即前面的可有可无
    + 匹配其前面的字符至少1次
    {m} 匹配前面的字符m次
    {m,n} 匹配前面的字符至少m次,至多n次
    {0,n} 匹配前面的字符至多n次
    {m,} 匹配前面的字符至少m次
    • 位置锚定:
    匹配规则 作用
    ^ 行首锚定;用于模式的最左侧
    $ 行尾锚定;用于模式的最右侧
    ^PATTERN$ 用于模式匹配整行
    ^$ 空行
    [1]*$ 空行
    < 或 \b 词首锚定;用于单词模式的左侧
    > 或 \b 词尾锚定;用于单词模式的右侧
    <PATTERN> 匹配整个单词
    • 分组:
      • ():将一个或多个字符捆绑在一起,当作一个整体进行处理;
        • (xy)*ab
      • Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
        • \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
          • (ab+(xy)*):
            • \1: ab+(xy)*
            • \2: xy

后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)

egrep及扩展的正则表达式

egrep = grep -E

语法:egrep [OPTIONS] PATTERN [FILE...]

扩展正则表达式的元字符:

字符匹配 作用
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符]
[^] 匹配指定范围外的任意单个字符
次数匹配 作用
* 匹配前面的字符任意次
? 0或1次
+ 1次或多次
m 匹配m次
m,n 至少m,至多n次
匹配规则 作用
^ 行首锚定;用于模式的最左侧
$ 行尾锚定;用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
[2]*$ 空行
< 或 \b 词首锚定;用于单词模式的左侧
> 或 \b 词尾锚定;用于单词模式的右侧
<PATTERN> 匹配整个单词

或者:

a|b

C|cat: C或cat


  1. [:space:] ↩︎

  2. [:space:] ↩︎