1. 基本正则表达式支持的元字符

元字符描述用法举例
.匹配任意一个字符。a., x.y, x.., .ab.
[]匹配指定范围内的任意字符。[abc], [0-9], [a-z], [A-Z], [[:alpha:]], [[digit:]], [[:alnum:]], [[space:]], [[:upper:]], [[:lower:]], [[:punct:]]
[^]匹配指定范围以外的任意字符,即‘[]’的取反。[^0-9], [^[:space:]], [^[:punct:]]
*对其前的字符匹配任意次。ab*, .*, *ab, xy*z, [[:space:]]*ab, xy[^[:punct:]]*
?对其前的字符匹配0次或1次。使用时要用转义符,即’\?’ab?, [[:space:]]?ab, xy[^[:punct:]]?
{}对其前的字符匹配指定区间次。使用时要用转义符,即’\{\}’ab\{3\}, ab\{1,\}, ab\{0,3\}, ab\{1,5\}
()分组符。使用时要用转义符,即’\(\)’ab\(xyz\)*, \(abc\)like\(xyz\)
\num分组引用。严格意义上并非元字符,而是一种特定的转义。要和分组符联合使用才有意义。he \(love\)s his \1r
^行首锚定符^#.*, ^Root
$行尾锚定符china$, ^$
<词首锚定符。使用时要用转义符,即’\<’\<[[:digit:]], \<Root
>词尾锚定符。使用时要用转义符,即’\>’\<root\>, \<[[:alnum:]]*\>


2. 扩展正则表达式增加的元字符

元字符描述用法举例
+对其前的字符匹配至少1次。ab+, ^#[[:space:]]+[^[:space:]]+
|组内多选一符。the selection is (yes|no), user name is (root|hadoop|redhat|centos)

注: 在扩展正则表达式模式下,除了词首锚定符’<’和词尾锚定符’>’使用时要进行转义外,其它元字符都不需要做转义!

3. grep和egrep命令常用的选项

-v 取反显示,即显示表达式不匹配的行。

-o 仅显示被匹配到的文本内容,而非整行的内容。

-i 匹配时不区分字符大小写。

-E 使用扩展的正则表达式模式。

-A num 同时显示匹配到的行的下面num行

-B num 同时显示匹配到的行的上面num行

-C num 同时显示匹配到的行的上面和下面各num行

--color=auto 对匹配到的文本内容用相应字体颜色显示。

-q 静默模式,即不输出任何内容,只关心匹配的执行结果,适合在shell脚本中使用。

-e expr 有多个正则表达式条件时,每个表达式前需用 -e 进行联合多个表达式条件。默认只有一个表达式条件时,-e 可以省略。

4. 正则表达式中关于引用的对应关系

正则表达式中使用’\1’,’\2’,’\3’… 引用前面对应的括号中的内容,遵循的原则是:左括号从左到右出现的次序。’\1’引用的内容是从左边开始,第1个左括号开始到其对应的右括号内内容;’\2’引用的内容是从左边开始,第2个左括号开始到其对应的右括号内内容;’\3’引用的内容是从左边开始,第3个左括号开始到其对应的右括号内内容;以此类推。因此,从括号的层次角度,是先引用外层括号内的内容,再引用内层括号内的内容。例:

info.text:

1 xyxyabababxyab

2 xyabxyab

3 xyabxyabxyab

4 xyxyxy

5 xyxyabababxyabxyxyababab

6 xyxyabababxyabxyxyabababxyabxyab

[zjp@localhost test]$ egrep --color=auto "((xy){2}(ab){3})(\2\3)*\1\4{2}" info.text

6 xyxyabababxyabxyxyabababxyabxyab

5. 在 ` ` 中支持的字符串模式匹配操作符’=~’

  • 不需要对模式匹配操作符右边的正则表达式加引号。

  • 支持的正则表达式是扩展的正则表达式模式。即对所有元字符都不需要进行转义。

  • 不支持词首锚定符’<’和词尾锚定符’>’。

lineStr=19934567

if [[ "$lineStr" =~ ([1-9][0-9]+|1[0-9][0-9]) ]] ; then
echo "$lineStr"
fi