如上图所示,"1133*" 表示匹配:“11”+“一个或更多的 3”+“可能的其他字符”。
注意,“匹配”和“等于”的概念并不相同:
匹配(egrep):相当于可以搜索到。
等于(sed):相当于可替换。
直接匹配 "*" 没有实际意义,可以理解为匹配任意字符,在实际工作中从来不使用。在很多时候,直接匹配一个字符加上*号也是没有意义的,因为很多时候只会匹配一次“0个该字符”。
一般需要匹配一个连续的字符串的时候,需要用这样的模式 "cc*",代表匹配了一个 c 和这个 c 之后的任意几个(或 0 个)c。
.(点)表示匹配除了新行符之外的任意一个字符。
"13.":表示匹配“13”+“至少一个任意字符(包括空格)”,如匹配 1133、11333,但不匹配 13。
^(脱字符)表示匹配一行的开头,但依赖于上下文环境,可能在方括号中表示否定。
$(美元符)表示在正则表达式中匹配行尾。
"^$":表示匹配空行。
[...](方括号)表示在正则表达式中表示匹配括号中的一个字符。
"[xyz]":匹配字符 x、y 或 z。
"[c-n]":匹配从字符 c 到 n 之间的任意一个字符。
"[B-Pk-y]":匹配从 B 到 P 或从 k 到 y 的任意一个字符。
"[a-z0-9]":匹配任意小写字母或数字。
"[^b-d]":匹配除了从 b 到 d 范围内所有的字符。这是正则表达式中反转意思或取否的一个例子(就好像在别的情形中 ! 字符所扮演的角色)。
多个方括号字符集组合使用可以匹配一般的单词和数字模式。如 "[Yy][Ee][Ss]" 表示匹配 yes、Yes、YES、yEs 等。
\(反斜杠)表示转义(escapes)一个特殊的字符,使这个字符等于原来字面上的意思。
如 "\$" 表示了原来的字面意思 "$",而不是在正则表达式中表达的匹配行尾的意思。
如 "\\" 也被解释成了字面上的意思 "\"。
转义符用途广泛,不仅仅用于正则上的匹配。在脚本中,有些时候不想让特殊字符立即生效,也需要使用转义符。
如上图所示,ssh 到 1.103 机器执行 echo “$PWD” 的命令:
如果没有转义 $ 符号,该命令在 linux 中执行实际就会是:ssh 192.168.1.103 echo /home/training/zhengze
转义之后,该命令在 linux 中执行会是:ssh 192.168.1.103 echo $PWD
\<...\>(转义"尖括号")表示匹配单词的边界。尖括号必须被转义,因为不这样做的话它们就表示单纯的字面意思。
如 "\<the\>" 匹配单词 "the",但不匹配 "them"、"there"、"other" 等。
扩展以下正则元素是扩展,并不是在所有地方都可以使用。
扩展的正则表达式增加了一些元字符到上面提到的基本的元字符集合里,它们可以在 egrep、awk 和 Perl 中使用。
?(问号)表示匹配零或一个前面的字符。它一般用于匹配单个字符。
+(加号)表示匹配一个或多个前面的字符。它的作用和 * 很相似,但唯一的区别是它不匹配零个字符的情况。
\{ \}(转义大括号)表示匹配前面正则表达式匹配的次数。
如果不转义的话,大括号只是表示他们字面上的意思。这个用法只是技巧上的而不是基本正则表达式的内容。
"[0-9]\{5\}":精确匹配 5 个数字 (从 0 到 9 的数字)。