一、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将搜索到的字符予以颜色加以标识,易于辨认

取反,即除了匹配到的行其余都显示

忽略大小写进行匹配

仅显示匹配到的字符串,在本例中即只显示root

静默模式,不输出

匹配到的行向下多显示一行,匹配到root后,连其后的一行一并显示

匹配到的行向上多显示一行,匹配到root后,连其上的一行一并显示

匹配到的行多显示其上下两行,匹配到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*(任意a到z的字母)t

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

出现大于m次,无上限

出现小于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

五、扩展正则表达式

扩展正则表达式(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])\>"


转载于:https://blog.51cto.com/zhouyuqin/901387