一、grep是什么。
    grep:Global search regular expression and print out the line.
    grep是一种文本搜索处理工具,根据用户指定的文本模式或搜索条件对目标文件进行逐行搜索,并显示能匹配到的行。
    语法格式:grep [options]... 'PATTERN' FILE...
              '':弱引用,
              "":强引用,如PATTERN中有变量需用双引号
    正则表达式:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能
    基本正则表达式:grep    
    扩展正则表达式:egrep,grep -E
    不支持使用正则表达式:fgrep,即用户搜索条件或文本模式表示其字面意义
    1、字符匹配
 
  
.:匹配任意单个字符
*:任意长度,它前面的字符可以出现任意次
.*:任意长度的任意字符
a|b:多条件匹配,a或者b  #扩展正则表达式可用
[]:匹配指定范围内的任意单个字符
    [0-9],[[:digit:]]    #表示任意数字
    [a-z],[[:lower:]]    #表示任意小写字母
    [A-Z],[[:upper:]]    #表示任意大写字母
    [[:space:]]          #表示空格
    [[:punct:]]          #表示特殊符号
    [[:alpha:]]          #表示任意字母
    [[:alnum:]]          #表示任意字母和数字
    [[:blank:]]          #匹配一个空格或制表符(TAB)
    [^]                  #条件取反
 
  
    2、次数匹配元字符
 
  
#"\"符号为转义符,扩展正则表达式不需要转义
\?:0次或1次,它前面的字符是可有可无的    
\{m\}:精确匹配m次,它前面的字符要出现m次    #转义前{m}
\{m,n\}:至少m次,至多n次            #转义前{m,n}
\{m,\}:至少m次                      #转义前{m,}
+:至少1次
\{0,n\}:至多n次                     #转义前{0,n}
 
  
    3、位置锚定
 
  
^:行首锚定,写在模式最左侧
$:行尾锚定,写在模式最右侧
^$:空白行
\<:词首,写在字符左侧
\>:词尾,写在字符右侧
\<char\>:锚定字符串
\b:字符串锚定,不区分词首词尾
 
  
    4、分组和引用
 
  
\(\):分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用。扩展正则表达式不需要转义,直接使用()即可
        例如:\(ab\).*\1,即引用前一个括号匹配到的内容
            格式:\(char\).*\#,\#表示引用前面第#个括号匹配的内容
 
  
    5、命令选项
 
  
-v:反向选取
-o:仅显示匹配的字串,而非字串所在的行
-i:igonore-case,忽略字符大小写
-E:支持使用扩展正则表达式
--color:匹配字串显示颜色,颜色可指定
-n:显示匹配行的位置,在第几行
-A #:显示上下文,#表示数字,显示下面#行
-B #:显示上面#行
-C #:显示上下#行
 
  
    6、例子
 
  
1)找出/etc/passwd文件中的一位数或两位数;
     # grep -E '\<[0-9]{1,2}\>' /etc/passwd   扩展正则
     # grep "\<[0-9]\{1,2\}\>" /etc/passwd    基本正则
2)显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
     # grep '^[[:space:]]{1,}' /boot/grub/grub.conf
     # grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf
3)找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行;
     # grep -o -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions
4)显示当前系统上root、fedora或user1用户的默认shell;
     # grep -E "^(root|fedora|user1):" /etc/passwd | cut -d: -f7