一、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