grep全称是:Global search Regular Expression and Printing全局搜索正则表达式并显示出来
使用正则表达式来描述选择条件。
取行选择;选取行的筛选条件,给定选取条件,只显示符合条件的行,或者只显示不符合条件的行。
对于类似的操作有三个命令:grep; egrep; fgrep
grep:默认支持基本正则表达式;
egrep:扩展正则表达式;
正则表达式是一类字符所书写的模式(pattern)
元字符:不表示字符本身的意义,而用于额外功能性的描述;
使用一堆元字符,不表示元字符本身的意义,而表示元字符用于描述功能的,而这个描述出来的功能或功能性描述所书写的表达式,我们把它称之为正则表达式。
使用一类不表示本身的元字符,组合其它字符所描述出来的能够匹配符合条件或者是符合模式字符的表达式称为正则表达式的模式。
用方法:grep [options] 'pattern' FILE 意思是说从这个文件中找出符合指写模式的行并显示出来。'pattern'用来描述搜索条件。
例:显示用户属性信息中包涵root字符的行
#grep ‘root’ /etc/passwd
也可以将查到的结果高亮显示;
#grep --color=auto ‘root’ /etc/passwd
基本正则表达式:贪婪模式(尽可能长地去匹配符合模式的内容)
^:锚定行首的符合条件的内容,用法格式“^pattern”;
如:grep --color=auto ‘^root’ /etc/passwd
$:锚定行尾的符合条件的内容,用法格式“pattern$”;
如:grep --color=auto ‘sh$’ /etc/passwd
^ pattern$:找出其自成一行的行
^$:找出空白行
如:#grep ‘^$’ /etc/rc.d/rc.sysinit
也可以传送给管道就能查出有多少个空白行
如:#grep ‘^$’ /etc/rc.d/rc.sysinit | wc -l
.:匹配任意单个字符
*:匹配紧挨在其前面的字符任意次;
如:a*b: ab,aab,acb,b,a
#grep --color=auto “a*b” grep.txt
.*: 匹配任意长度的任意字符
如:#grep --color=auto ‘r.*h’ /etc/passwd
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[a-z],[A-Z],[0-9]
[:lower:] a-z
[:upper:] A-Z
[:digit:] 所有数字
[:alpha:] 所有大小写字母
[:alnum:] 所有大小写字母与数字
[:space:] 所有空白
[:punct:] 所有标点
如:#grep --color=auto 'r[0-9].*h' /etc/passwd
\?:匹配紧挨在其前面的字符0次或1次;
a\?b :ab,b
如:#grep --color=auto "a\?b" grep.txt
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次;0-n次;
\{m,\}:至少m次
\{m\}:精确匹配m次
如:a\{1,3}b: b,ab,aaab,aaaaaab,acb
只有ab,aaab,匹配。
注:写grep时,模式中间没有元字符加不加引号都行;但是不加引号时,无论里面写的是什么,包括元字符,它也只将其理解成字符本身的意义,不会将它解晰为模式的。所以一定要加引号,单双引号都可以。如果说模式中使用变量时,则要使用双引号。
\<:锚定词首,用法格式:\<pattern或者\b:\bpattern
\>:锚定词尾,用法格式:pattern\>或者\b:pattern\b
\<pattern\>:锚定单词
\(\):分组,用法格式:\(pattern\)
如:\(ab\)\{1,3}:ab,abb,abab,ababab
ab任意字符ab:ab.*ab
a.b任意字符a.b:\(a.b\).*\1
如:找出下面以l开头中间跟了两个字符以e结尾,后面引用前面的内容再在后面以r结尾的内容。
He like his liker
He love his liker
She love her lover
She like her lover
grep的选项:
--color=auto
export GREP_COLOR='01;36'
-v: 反向选取,只显示不符合模式的行;
-o: 只显示被模式匹配到的字串,而不是整个行;
-i: 不区分字符大小写;
-A #:显示匹配到的行时,顺带显示其后面的#(#号代表数字)个行;
-A 2(表示后面的两行都显示出来)
-B #:前面的#行;
-C #:前后的#行;
-E: 使用扩展的正则表达式 grep -E = egrep