一、grep是干什么的

grep的全名是Galobal research Regular Expression and Pringtiong,即搜索正则表达式,也就是说grep简单来讲就是用来搜索匹配字符的

二、grep分类

grep有基本正则表达式和扩展正则表达式之分,不过她们的作用域和使用方法大同小异

三、grep用法及选项

首先普通的用法:grep [option] 'PATTERN' file file2...

:grep 'root' /etc/passwd搜索在/etc/passwd中的root字符的那一行

选项:

grep --color 'root' /etc/passwd将搜索到的字符予以颜色加以标识,易于辨认

 -v 'root' /etc/passwd取反,即除了匹配到的行其余都显示

 -i 'root' /etc/passwd忽略大小写进行匹配

 -o 'root' /etc/passwd仅显示匹配到的字符串,在本例中即只显示root

 -q 'root' /etc/passwd静默模式,不输出

 -A 'root' /etc/passwd匹配到的行向下多显示一行,匹配到root,连其后的一行一并显示

 -B' root' /etc/passwd匹配到的行向上多显示一行,匹配到root,连其上的一行一并显示

 -C 'root' /etc/passwd匹配到的行多显示其上下两行,匹配到root,其上下两行一并显示

四、基本正则表达式

     .(点号):表示匹配任意单个字符;:grep -o "r." /etc/passwd只显示r*(任意单一字符)

     *匹配前面一个字符任意次(可以是0):ab*c:abc,abbc,a,ac,acc显示abc,abbc,ac,acc

 .*:表示任意长度的任意字符(两个一起用时,贪婪模式,能匹配多长就匹配多长)

             例:grep -o "r.*" /etc/passwd,显示r(气候任意长度,任意字符)

     []指定范围内的任意单个字符[^a-z]指定范围内之外的字符

             例:grep -o "ro[a-z]t" /etc/passwd匹配ro*(任意az的字母)t

 X\{m,n\}:X出现大于m,小于n;:grep "ro\{1,3\}t" /etc/passwd

 X\{m,\}:X出现大于m,无上限

 X\{0,n\}:X出现小于n

 ?:匹配其前面的字符0次或一次;例如:ab?c:abc,abbc,ac

 锚定符:

 ^:锚定行首(行首匹配);:grep "^root" /etc/passwd

 $:锚定行尾(行尾匹配):grep "bin$" /etc/passwd

 ^$:空白行 grep  -v ^$ /etc/passwd除了空白行都显示

 \<或者\b:锚定词首;例如:\<r..t(表示r必须出现在词首的)grep "\<root" /retc/passwd

 \>或者\b:锚定词尾;例如:r..t\>(表示t必须出现在词尾)

 \(\):分组

 后向引用:\1,\2:grep "l\([0-9]\{1,\}\):\1:.* \1" /etc/inittab

五、扩展正则表达式

    extended regexp:扩展正则表达式(egrep支持这种)

    \{\}-->{}

\(\)-->()

+:做次数匹配,表示匹配其前的字符一次或多次

|:或者 a|b,C|cat:C,cat;(C|c)at:Cat,cat

找出ifconfig命令结果中的1-255之间的整数:ifconfig | grep -E "\<([1-9]|[1-9][0-9]|1[1-9][1-9]|2[1-5][0-5])\>"