特别要注意的几个元字符
*号
在脚本中代表所有
在 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不需要转义