一 正则表达式概述
正则表达式:又称规则表达式。(英语: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:]]+