grep文本過濾 / 正則表達式


1、grep:git

        

    做用:正則表達式

         一、文本搜索工具;
shell

        二、基於Pattern(過濾條件)對目標文本逐行進行匹配centos

         三、打印出符合條件的行bash

    模式:    ide

        一、由文本字符及正則表達式元字符所編寫的過濾條件工具

         二、模式經過正則表達式引擎匹配搜索spa

         三、正則表達式引擎:利用正則表達式分析給定文本的程序;orm

    格式字符串

        grep [OPTIONS] PATTERN [FILE...]

       -i 忽略字符大小寫;

         -o : 僅顯示匹配到的文本自身    

         -v : 反向匹配

         -E : 支持擴展正則表達式

         -q : 靜默模式,不輸出任何信息

        -A# : 展現匹配到的文本的當前行和後#行

        -B# : 展現匹配到的文本的當前行和前#行

        -C# : 展現匹配到的文本的當前行和先後各#行

       --color=auto : 對匹配到的文本高亮顯示 


   基本正則表達式元字符


    字符匹配:


       "." : 匹配任意單個字符;

        [ ] : 匹配範圍內的任意單個字符;

       [^ ] : 匹配範圍外的任意單個字符;

           [:digit:]全部數字            [:alnum:]全部數字和字母  

                   [:lower:]只顯示小寫字母       [:space:]空白字符

                   [:upper:]只顯示大寫字母       [:punct:]標點符號

                  [:alpha:]全部字母

              

     匹配次數:

                用在要指定其出現的次數的字符後面,用限制其前面的字符要出現的次數;默認工做於貪婪模式


          * : 匹配前面的字符任意次(0,1或屢次);

         .* : 匹配任意長度的任意字符

         \+ : 匹配前面的字符至少1次;

         \? : 匹配前面的字符0次或一次,即前面的字符無關緊要

      \{m\} : 其前面的字符出現m次,m爲非負整數

    \{m,n\} : 其前面的字符至少出現m次至多出現n次

    \{0,n\} : 之多出現n次

     \{m,\} : 至少m次

   位置錨定:

             限制模式所匹配到的文本只能出現於目標文本的哪一個位置

         ^ : 行首錨定:用於模式的最左側:^PATTERN

         $ : 行尾錨定:用於模式的最右側:PATTERN$

 ^PATTERN$ : 匹配完整一行;

        ^$ : 匹配空行;等同於^[[:space:]]*$;

    \<或\b : 詞首錨定,用於單詞最左側,格式爲\<PATTERN,\bPATTERN

    \>或\b : 詞尾錨定,用於單詞最右側,格式爲PATTERN>\,PATTERN\b

       \<PATTERN\> : 單詞錨定

   分組與引用:

\(PATTERN\): 將此PATTERN匹配到的字符看成一個不可侵犯的總體進行處理;

        \n : 模式中第n個左括號以及與之匹配的右括號之間的模式所匹配到的字符串;


                  練習:找出用戶名和shell同名的用戶                 

               egrep "^([a-z0-9]+)\>.*\1$" /etc/passwd




egrep:

        egrep [OPTIONS] PATTERN [FILE...]

 擴展正則表達式元字符:


        字符匹配:

            "." : 任意單個字符

            [ ] : 範圍內的任意單個字符

           [^ ] : 範圍外的任意單個字符

  匹配次數:

              * : 任意次

              ?: 0次或1次

              + : 1次或屢次

            {m} :匹配m次

          {m,n} : 至少m次至多n次

           {m,} :至少m次至多不限

  位置錨定:

         ^  : 行首錨定

         $  : 行尾錨定

      \<,\b : 詞首錨定

      \>,\b : 詞尾錨定

 

分組及引用:

       (PATTERN): 將此PATTERN匹配到的字符看成一個不可侵犯的總體進行處理;

       \1,\2... : 模式中第n個左括號以及與之匹配的右括號之間的模式所匹配到的字符串;


 或者: "|"

           a|b : a或者b

         C|cat : 表示C或者cat

       (C|c)at : 表示Cat或cat

fgrep不支持使用正則表達式

      當無需用到元字符編寫模式時,使用fgrep處理數據量龐大的文本文件時,速度能夠體現出來


練習:

   一、顯示/etc/passwd文件中不以bash結尾的行;

                 grep -v bash$ /etc/passwd
                 egrep -v bash$ /etc/passwd

    二、找出/etc/passwd文件中的三位或四位數;

                 grep "[[:digit:]]\{3,4\}" /etc/passwd
                 egrep "[[:digit:]]{3,4}" /etc/passwd

            三、找出/etc/grub2.cfg文件中,以致少一個空白字符開頭,後面又跟了非空白字符的行;

                 grep "^[[:space:]]\+"[^[:space:]] /etc/grub2.cfg
                 egrep "^[[:space:]]+"[^[:space:]] /etc/grub2.cfg

    四、找出"netstat  -tan」命令的結果中,以‘LISTEN’後跟0或多個空白字符結尾的行;

                 netstat -tan | grep "LISTEN[[:space:]^]*" 
                 netstat -tan | egrep "LISTEN[[:space:]^]*

            五、找出"fdisk  -l「命令的結果中,包含以/dev/後跟sd或hd及一個小字母的行;

                 fdisk -l | grep "/dev/[s,h]d[[:lower:]]"
                 fdisk -l | egrep "/dev/[s,h]d[[:lower:]]"

    六、找出」ldd  /usr/bin/cat「命令的結果中文件路徑;

                 ldd /usr/bin/cat | grep -o "/[^[:space:]]\+"
                 ldd /usr/bin/cat | egrep -o "/[^[:space:]]+"

    七、找出/proc/meminfo文件中,全部以大寫或小寫s開頭的行;至少用三種方式實現;

                 grep "^s|S" /etc/meminfo
                 grep "^[sS]" /etc/meminfo
                 grep -i "^s" /etc/meminfo

    八、顯示當前系統上root、centos或slackware用戶的相關信息;

                 egrep "^(root|centos|slackware)\>" /etc/passwd

    九、echo輸出一個絕對路徑,使用egrep取出其基名;

                 echo /etc/passwd | egrep -o "[^/]+/?$"

   十、找出ifconfig命令結果中的1-255之間的整數;

                ifconfig | egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

   十一、添加用戶bash、testbash、basher及nologin,要求前三個用戶的默認shell爲/bin/bash,nologin的默認shell爲/sbin/nologin,然後找出其用戶名與shell名相同的用戶;

                 egrep "^([0-9a-z]+)\>.*\1$" /etc/passwd
相關文章
相關標籤/搜索