grep命令   指定格式的字符串,去匹配指定的文档   grep -E ==egrep

grep egrep sed awk 均支持正则表达式 

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

grep --color 'root' /etc/passwd           匹配关键字,高亮显示

grep --color -n 'root' /etc/passwd        匹配关键字,高亮显示,并显示行号

grep --color -c 'root' /etc/passwd        只统计匹配了的总行数,不显示具体内容

grep --color -v 'root' /etc/passwd        显示没有匹配的内容,反选。

grep --color -A2 'root' /etc/passwd       显示匹配行,且匹配行的下2行也打印出来

grep --color -B2 'root' /etc/passwd       显示匹配行,且匹配行的上2行也打印出来

grep --color -C2 'root' /etc/passwd       显示匹配行,且匹配行的上下2行也打印出来

grep --color -r 'root' /etc/              递归查找/etc下所有文件中,包含关键字的行

grep --color -rh 'root' /etc/             递归查找/etc下所有文件中,包含关键字的行

                                          去掉第一行的文件路径和名称, -h不显示文件路径和名称

正则表达式中,特殊符号的含义总结:

  任意1个字符 

*   *号前字符的0-无穷个

.*  任意个任意字符

?   ?前字符的0-1个

+   +前字符的1-无穷个

|   |符号前后字符的任意一个(或者关系)

()  ()内容为一个整体,需全部匹配

{}  {}内一般是数字,指匹配的次数,可多次匹配。

[]  []内的字符,任意匹配一个即可。

例: grep '[0-9a-zA-Z]' 2.txt        匹配数字和英文的行

     grep '^[0-9a-zA-Z]' 2.txt       匹配数字和英文开头的行

     grep '[^0-9a-zA-Z]' 2.txt       匹配不是数字和英文开头的行

     grep '^$' 2.txt                 匹配空行

     grep 'r.o' 2.txt                匹配包含r+任意1个字符+o的行

     grep 'r*o' 2.txt                匹配包含o或者ro rro rrr...o的行

     grep 'r.*o' 2.txt               匹配r开头o结尾的行 (贪婪匹配

 

? + | () {} 符号特殊,使用grep时必须使用转义符\ ,或者参数-E ,或者命令egrep   

     grep -E 'r?o'                   匹配o或者ro的行    

     grep -E 'root|nologin' 2.txt    匹配root或者nologin的行   (或者关系)

     grep 'root' 2.txt |grep 'nologin'   匹配2次               (并且关系)

    egrep '(rr)+' 2.txt              匹配rr的1-无穷个          (整体匹配)

    egrep '(rr){1,3}' 2.txt          {}中为匹配次数,可以多次匹配。