19.1. 一份简要的正则表达式介绍

正则表达式就是由一系列特殊字符组成的字符串, 其中每个特殊字符都被称为元字符, 这些元字符并不表示为它们字面上的含义, 而会被解释为一些特定的含义. 具个例子, 比如引用符号, 可能就是表示某人的演讲内容, 同上, 也可能表示为我们下面将要讲到的符号的元-含义. 正则表达式其实是由普通字符和元字符共同组成的集合, 这个集合用来匹配(或指定)模式.

一个正则表达式会包含下列一项或多项:

正则表达式最主要的目的就是用于(RE)文本搜索与字符串操作. (译者注: 以下正则表达式也会被简称为RE.) RE能够匹配单个字符或者一个字符集 -- 即, 一个字符串, 或者一个字符串的一部分.

Note

与GNU工具一样, 某些版本的sed, ed, 和ex一样能够支持扩展正则表达式, 上边这部分就描述了扩展正则表达式.

Sed, awk, 和Perl在脚本中一般都被用作过滤器, 这些过滤器将会以RE为参数, 对文件或者I/O流进行"过滤"或转换. 请参考例子 A-12例子 A-17, 来详细了解这种用法.

对于RE这个复杂的主题, 标准的参考材料是Friedl的Mastering Regular Expressions. 由Dougherty和Robbins所编写的Sed & Awk这本书, 也对RE进行了清晰的论述. 如果想获得这些书的更多信息, 请察看参考文献.

注意事项

[1]

因为sed, awk, 和grep通常用于处理单行, 但是不能匹配一个换行符. 如果你想处理多行输入的话, 那么你可以使用"点"来匹配换行符.
  1 #!/bin/bash
  2 
  3 sed -e 'N;s/.*/[&]/' << EOF   # Here Document
  4 line1
  5 line2
  6 EOF
  7 # 输出:
  8 # [line1
  9 # line2]
 10 
 11 
 12 
 13 echo
 14 
 15 awk '{ $0=$1 "\n" $2; if (/line.1/) {print}}' << EOF
 16 line 1
 17 line 2
 18 EOF
 19 # 输出:
 20 # line
 21 # 1
 22 
 23 
 24 # 感谢, S.C.
 25 
 26 exit 0