正则元字符和扩展元字符的简要说明

特别要注意的几个元字符
*号  
    在脚本中代表所有
    在 egrep 正则中代表 出现 0次至多次
+号在 egrep 正则中代表至少一次
%在正则代表全文
两个尖括号代表一个单词  \<   \>

基本正则表达式元字符
元字符                功能                                示例                                                                与shell中用法对比
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
^                行首定位符                                ^love
$                行尾定位符                                love$
.                匹配单个字符                            l..v                                                                    相当于shell中的?号         
*                匹配前导符0到多次                    ab*love
.*            任意多个字符                                                                                                        相当于shell中的*号,任意多个字符
[]            匹配指定范围内的一个字符        [IL]ove
[ - ]        匹配指定范围内的一个字符         [a-z0-9]ove
[^]            匹配不在指定组内的字符          [^a-z0-9]ove
\                用来转义元字符                        love\.
\<            词首定位符                                \<love
\>            词尾定位符                                love\>
\(..\)    匹配稍后使用的字符的标签        :%s/172.16.130.1/172.16.130.5/
                                                                    :%s/\(172.16.130.\)1/\15/
                                                                    :%s/s\(172.\)\(16.\)\(130.\)1/\1\2\3/5/
                                                                    :3,9s/\(.*\)/#\1/
x\{m\}    字符重复出现m次                        o\{5\}    
x\{m,\}    字符重复出现m次以上                o\{5,\}
x\{m,n\}字符重复出现m到n次                    o\{5,10\}
                    
注意加上引号,避免空格造成错误        
正则中元字符区分英文大小写   shell元字符不区分大小写    

正则中 grep '[^0-9A-Z]oot' /etc/passwd

shell下 ll l[a-z]ve      live lIve love        

=========扩展正则表达式元字符=========
+                                        匹配一个或多个前导字符        [a-z]+ove
?                                        匹配零个或一个前导字符        lo?ve    
a|b                                匹配a或b                                     love|hate    
()                                    组字符loveable|rs               love(able|rs)    ov+  ov+ (ov)+
(..)(..)\1\2            标签匹配字符                          (love)able\1er
x{m}                            字符x重复m次                             o{5    
x{m,}                                字符x重复至少m次                o{5,}
x{m,n}                            字符x重复m到n次
()                                    组字符                                        loveable|rs    love(able|rs)ov+  ov+ (ov)+
(..)(..)\1\2                标签匹配字符                            (love)able\1er
x{m}                                字符重复m次
x{m,}                             字符至少重复m次
x{m,n}                            字符重复m到n次

* ? + {} 都不是为自己活着的,都是为别人活着的,遇到他们就要往前看

POSIX

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


grep -v 取反
grep -i 忽略大小写
grep -R -r  递归 针对目录
grep -o 只显示一行匹配的部分
grep -A2  -B2 -C2 之后的几行 之前的几行  上下的几行 
grep -n 相对行号,确定行号 可以 vim /etc/passwd +50 直接到

在 () {} 的使用中 grep需要转义 egrep不需要转义 

上一篇:执行umount 的时候却提示:device is busy 的处理方法


下一篇:python functiontools模块中的 wraps