一 正则表达式概述

正则表达式:又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或
RE),是计算机科学的一个概念。正则表达式由元字符组成,通常被用来检索、替换那些符合某个模式
(规则)的文本(许多程序设计语言都支持利用正则表达式进行字符串操作)。


元字符:是一类可以表达出超越其字面本身含义的特殊字符

shell元字符(也称为通配符): 由shell解释器来解析,如rm -rf *.pdf,元字符*Shell将其解析为任
意多个字符
正则表达式元字符 : 由各种执行模式匹配操作的程序来解析,比如vi、grep、sed、awk
例如:vim示例:
 :1,$ s/tom/EGON/g # 如anatomy、tomatoes及tomorrow中的“tom”被替换了,而Tom确没 
被替换 
:1,$ s/\<[Tt]om\>/EGON/g


二 正则表达式元字符

2.1 基本正则元字符集
元字符      功能
^           # 行首       
$           # 行尾
.           # 除了换行符以外的任意单个字符
*           # 前导字符的零个或多个
.*          # 所有字符
[]          # 字符组内的任一字符
[^]         # 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^]        # 非字符组内的字符开头的行
[a-z]       # 小写字母
[A-Z]       # 大写字母
[a-Z]       # 小写和大写字母
[0-9]       # 数字
\           # 用来转义元字符
\<          # 词首定位符 单词一般以空格或特殊字符做分隔、连续的字符组成
\>          # 词尾定位符
\(..\)      # 匹配稍后将要使用的字符的标签
x\{m\}      # 字符x重复出现m次
x\{m,\}     # 字符x重复出现m次以上
x\{mn\}     # 字符x重复出现m到n次
\b          # 详细解释见下一篇随笔
$'a\tb'     # 匹配换行符和制表符
[root@web ~]# echo -e "a\nb" |grep $'a\nb' 
a
b

2.2 扩展正则元字符集
# 扩展正则元字符
+             # 匹配一个或多个前导字符
?             # 匹配零个或一个前导字符
a|b           # 匹配a或b
()            # 组字符
(..)(..)\1\2  # 标签匹配字符
x{n}          # x 出现n次
x{n,}         # x出现n次至无穷次
x{n,m}        # x出现n次至m次

# 若想使用扩展正则
grep加-E 或 egrep 或转义\
sed 加 -r 参数 或转义
AWK 直接支持大多数扩展正则,更多支持需要加选项--posix选项


三 grep使用元字符总结

grep: 使用基本元字符集 ^, $, ., *, [], [^], \< \>,\(\),\{\}
egrep(或grep -E): 使用扩展元字符集 ?, +, { }, |, ( )
# 注:grep也可以使用扩展集中的元字符,仅需要对这些元字符前置一个反斜线
\w 所有字母与数字,称为字符[a-zA-Z0-9] 'l[a-zA-Z0-9]*ve' 'l\w*ve'
\W 所有字母与数字之外的字符,称为非字符 'love[^a-zA-Z0-9]+' 'love\W+'
\b 词边界 '\blove\b' '\<love\>'

四 计算机定义的字符分类(posix)

# 表达式       功能                   示例
[:alnum:]     字母与数字字符                      [[:alnum:]]+ 
[:alpha:]     字母字符(包括大小写字母)             [[:alpha:]]{4}
[:blank:]     空格与制表符                        [[:blank:]]*
[:digit:]     数字字母                            [[:digit:]]?
[:lower:]     小写字母                            [[:lower:]]{5,}
[:upper:]     大写字母                            [[:upper:]]+
[:punct:]     标点符号                            [[:punct:]]
[:space:]     包括换行符,回车等在内的所有空白      [[:space:]]+