LINUX  --grep   这是一个非常重要的工具,sed,awk,grep被称为LINUX的3剑客!

    grep :根据模式,搜素文本,并将符合模式的文本行显示。

    举例子说语法:

   例子1: #grep -i 'root'  /etc/passwd    #找出/etc/passwd这个文件中root或者ROOT的行,-i是                                            ignore,忽略的意思,忽略大小写。

   ------------------------------------------

   例子2: #grep -v‘root' /etc/passwd     #找出/etc/passwd这个文件中,处理有root的行不显示

                                            出来,其余的行都显示出来,-v是invert,使反转

   ------------------------------------------

   例子3: #grep -o 'root' /etc/passwd     #找出/etc/passwd这个文件中,匹配的单词,不是行!

                                            只是把root这个单词显示出来,你自己敲一遍就知道

                                            这个单词的作用了。-o,是only,仅仅,只有!

   -----------------------------------------

   例子4: #grep --color 'root' /etc/passwd     #找出/etc/passwd这个文件中root的行,同时用

                                                 颜色显示出来。--color ,颜色。

   小技巧:  #alias  grep='grep --color' #有了这个别名以后,直接用grep,不用加--color,就会

                                          直接用颜色显示出来,不过电脑重启,就会失效。

   --------------------------------------------------------------------------------

   例子5: #grep -A 'model'  /proc/cpuinfo   #意思是显示出model及其后面的2行,-A ,想after

   --------------------------------------------------------------------------------

   例子6: #grep -B 'model' /proc/cpuinfo    #意思是显示出model及其前面的2行,-B,想before

   ------------------------------------------

   一点小小的知识点:

   正则表达式:(英文:REGular EXPression ----REGEXP)

   * :   星号是任意长度的任意字符

   ?:   问号是任意的单个字符

  [] :    中括号是匹配指定范围内的任意单个字符,比如:[0-9]就是0到9里面的某个数字

          例子:  #grep --color [0-9]  /etc/inittab   0到9的数字都会显示出来了。自己敲,

                                                      看看效果。只有自己多敲,才明白。

 --------------------------------------------------------------------------------

 继续说:

 [^] :     中括号里面加上一个尖尖的号,是匹配指定范围外的任意单个字符

           例子:  #grep --color [^0-9] /etc/inittab  你看一下效果,除了0-9的阿拉伯数字,

                                                      其他的字母都显示出来了。

---------------------------------------------------------------------------------

 字符集合:[:alpha:]   #意思是所有字母的集合

           [:digit:]   #意思是所有数字的集合

           [:upper:]   #意思是所有大写字母的集合

           [:lower:]   #意思是所有小写字母的集合 

           [:alnum:]   #意思是所有字母和数字的集合

           [:punct:]   #意思是所有标点符号的集合

           [:space:]   #意思是所有空格的集合    

           例子:  grep '[[:upper:]]' /etc/passwd  #意思是列成/etc/passwd这个文件中所有的

                                                    大写字母。 

  ------------------------------------------------------------------------

  匹配次数:

           *     :  星号匹配其前面的字符任意次,任意次包括0次,也包括无数次。

           .*    :  点和星号,表示任意长度的任意字符!注意和单独的一个星号做比较。

  -------------------------------------

           ?    : 单独的一个问号,表示匹配前面的字符一次或者0次。

                    例子:grep 'a\?b'  /etc/passwd #意思是把b,或者前面有1个a,然后有1个b的

                                                    单词显示出来。

 

  --------------------------------------------------------------

      \{m,n\}   :匹配其前面的字符至少m次,最多n次。

                 例子: grep 'a\{1,3\}' /etc/passwd   

                        \{1,\} #最少1次,最多无数次

                        \{0,3\} #最少0次,最多3次,0和3用逗号隔开


  -------------------------------------

           ^    :托字符,表示此字符后面的内容必须出现在行首。

           $    :美元字符,表示此字符前面的内容必须出现在行尾。

                   例子: # grep  '^a'  /etc/passwd  意思是列出a字母必须出现在开头的行

                          # grep  ':$'  /etc/passwd  意思是列出冒号必须出现在结尾的行

           小技巧:  ^$    :这个字符的结合表示空白行。

  --------------------------------------

   \b  或者 \<    :意思是其后面的任意字符必须作为单词的首部出现。

   \b  或者 \>    :意思是其前面的任意字符必须作为单词的尾部出现。

                   把这个符号和^和$做比较,看看有什么不同。

                    比较:

                            #grep --color '\<root' /etc/passwd

                            #grep --color '^root'  /etc/passwd

  小提示:  \<root\>   这就代表这一行就这1个单词,root!


 ---------------------------------------------------


  分组:

       \(  \)

  #grep '\(root\).* \1' /etc/passwd    #命令中,\1的意思是再次引用前面括号中的内容,即root

  比较:   sed 's#\(root\)#\1R#g'  /etc/passwd    比较一下不同,对sed和grep更好的理解。


----------------------------------------------------------------



可拓展的正则表达式:(extended regular expression)

   什么叫可拓展,举个例子:

        #  grep -E '(root)' /etc/passwd

        #   grep '\(root\)'  /etc/passwd

   上面这2个命令都是把/etc/passwd这个文件中带有root的行显示出来,但是一个有反斜线,一个没有反斜线,这就是区别!  -E 这个选项加上以后,就不用反斜线了。

        #egrep '(root)' /etc/passwd      #注意,egrep ==  grep -E,  一样的功能。  


    写的不好,请谅解!能对你起到一点点帮助,就算没白写。