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