grep/egrep正则表达式

正则表达式:用指定字符串去匹配指定的行。

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本

,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。



语法: grep  [-cinvABC]  'word'  filename


--color  //在匹配的时候,把关键字用颜色标识起来。

alias cg="grep --color"   //可以把grep --color编成别名。为了永久使用可以把它加在.bashrc中。 


-n   //在匹配的时候,显示行号。

-c  //在匹配的时候,只显示出现了多少行。

-v   //在匹配的时候,取反。

-A  num  //如A2,除了输出符合条件的行,还要输出它下面两行。

-B  num  //如B2,除了输出符合条件的行,还要输出它上面两行。

-C  num  //如C2,除了输出符合条件的行,还要输出它上下面各两行。

-r      //遍历查找文件内容,如果不想显示前面的文件名可以加个h,即-rh.

cg  -rh 'iptables' /etc/*

注:如果用vim编辑1.txt时,没有正常退出,会产生文件1.txt.wap,下次vim 1.txt时,会有相关提示。

cg  '^$'  1.txt  //查找空行。

cg  'r.o' 1.txt  //.表示r与o之间的任意一个字符。

cg   'r*o' 1.txt  //除了o之外,还要匹配零个或多个*前面的字符

cg  'r.*o' 1.txt   //.*表示匹配任意个字符(零个或多个)。在这里r开头,o结尾的都能匹配。

cg   'r\?o' 1.txt   //匹配零个或一个问号前面的字符。

cg -E 'r?O' 1.txt   //-E选项相当于脱义。

cg -E ==egrep

egrep 'r+o' 1.txt    //匹配一个或多个加号前面的字符。

egrep  --color  'root|nologin' 1.txt  //匹配root或nologin(|表示或者)

egrep  --color  'root' 1.txt |egrep --color 'nologin'  //通过管道符来实现'与'的目的。(&不能表示'与'。)

egrep --color  '(rr)+' 1.txt   //用括号括起来的内容表示一个整体。

egrep --color  '(rr){1,3}' 1.txt  //匹配一到三次括号里的内容。

egrep --color  '(rr){5}' 1.txt   //匹配5次括号里的内容。

注:? + () {} |这些符号使用时需要用egrep;grep使用时需要加脱义符;grep -E也可以用。

EG:

grep -c 'false' test001.txt

-i   //忽略大小写

grep -i 'FALSE' test001.txt

-n  

grep -n 'false' test001.txt

-v   //打印不符合要求的行


grep -v 'false' test001.txt


-A   


grep -A2 'root' test001.txt

-B   

grep -B2 'daemon' test001.txt


-C   


grep -C2  'nobody' test001.txt


其他用法:


过滤不带有某个关键词的行,并输出行号:


grep -nv  'root' test001.txt


过滤出所有包含数字的行


grep '[0-9]'  test001.txt


过滤出所有不包含数字的行 


grep -v   '[0-9]'  test001.txt


把所有以 ‘#’ 开头的行去除


grep  -v '^#' test001.txt



去除所有空行和以 ‘#’ 开头的行 


grep -v '^#' test001.txt|grep -v '^$'


//在正则表达式中, “^” 表示行的开始, “$” 表示行的结尾,那么空行则可以用 “^$” 表示.


过滤任意一个字符与重复字符


grep -n 'r..t' test001.txt


//. 表示任意一个字符,上例中,就是把符合r与o之间有两个任意字符的行过滤出来.


grep  -n 'r**t' test001.txt


// * 表示零个或多个前面的字符。


grep -n '.*' test001.txt



//‘.*’ 表示零个或多个任意字符,空行也包含在内。


指定要过滤字符出现的次数 


grep -n   'o\{2\}' test001.txt   //x\{m\}       重复字符x,m次,如:'o\{2\}'匹配包含2个o的行。


grep -n   'o\{2,\}' test001.txt   //x\{m,\}     重复字符x,至少m次,如:'o\{2,\}'匹配至少有2个o的行。


grep -n   'o\{2,5\}' test001.txt   //x\{m,n\}     重复字符x,至少m次,如:'o\{2,5\}'匹配至少有2个o,且最多有5个o的行。



egrep


egrep命令是一个搜索文件获得模式,使用该命令可以任意搜索文件中的字符串和符号,也可以为你搜索一个多个文件的字符串,

一个提示符可以是单个字符、一个字符串、一个字、一个句子。


筛选一个或一个以上前面的字符:


egrep 'o+' test001.txt


筛选零个或一个前面的字符 


egrep  'o?' test001.txt


筛选字符串1或者字符串2 :


egrep  'r(oo)|(oa)t' test001.txt


egrep  '(oo)+'  test001.txt   //用( )表示一个整体,例如(oo)+就表示1个 ‘oo’ 或者多个 ‘oo’