Linux文本三劍客之grep

一、定義

                GREP  :Global search REgular expression and Print out the line的縮寫。是一種強大的文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;并把匹配的行打印出來。

                模式:由正則表達式字符及文本文字符所編寫的過濾條件

                REGEXP(正則表達式):有一類特殊字符及文本字符所編寫的模式,其中有些字符不表示字符的字面意義,而表示控制或通配的功能

                        分為:1、基本正則表達式:BRE(grep支持)

                              2、擴展正則表達式:ERE(egrep支持)

二、grep用法:

         grep [OPTIONS] PATTERN [FILE…]    Note:egrep和grep的用法一致

              選項:

                   –color=auto : 對匹配到的文本著色顯示

                    grep root.png

                   -v:顯示不能夠被pattern匹配到的行

                   -i:忽略字符大小寫

                   -o:僅顯示匹配到的字符串

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

                   -A #:after,顯示匹配到的行及后#行

                   -B #:before,顯示匹配到的行及前#行

                   -C #:context,顯示匹配到的行及前后各#行

                   -E:使用ERE    grep -E = egrep

三、正則表達式:

    基本正則表達式元字符:

        1、字符匹配

        點號(.):匹配任意單個字符

        [ ]:匹配指定范圍內的任意單個字符

        [ ^ ]:匹配指定范圍外的任意單個字符

                       [[:digit:]],[0-9]  表示0-9的任意數字

                       [[:lower:]], [a-z]  表示26個小寫英文字母

                       [[:upper:]], [A-Z]  表示26個大寫英文字母

                       [[:alpha:]], [a-zA-Z] 表示所有英文字母

                       [[:alnum:]], [[0-9a-zA-Z] 表示數字,所有英文字母

                       [[:space:]]  表示空白字符

                       [[:punct:]]  表示符號字符

        2、匹配次數:用在要指定次數的字符后面用于指定前面的字符要出現的次數

        *:匹配前面的字符任意次,任意長度(*自身表示匹配的次數,本身無任何意義,與glob不同)

                 ex:grep “x*y”:abxy,xay,xxxxxxy(貪婪模式,盡可能多的匹配)

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

        \?:匹配其前面的字符0或1次;即前面的字符可有可無

        \+:匹配其前面的字符至少一次

        \{m\}:匹配前面的字符m次

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

        \{0,n\}:匹配前面的字符至多n次

        \{m,\}:匹配前面的字符至少m次

         3、位置錨定:

         ^:行首錨定,用于模式的最左側

         $:行尾錨定,用于模式的最右側

         ^PATTERN$:用于模式匹配整行

              ^$:空行

              ^[[:space:]]*$

         \<或\b:詞首錨定:用于單詞模式的左側

         \>或\b:詞尾錨定:用于單詞模式的右側

         \<PATTERN\>:匹配整個單詞

         4、分組:

         \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理

         \(xy\)*ab

             后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)

             Note:分組括號中的額模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為\1、\2、\3,….

                    \1:從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符

             ex:\(ab\+\(xy\)*\)

                 \1:\(ab\+\(xy\)*

                 \2:xy

    擴展正則表達式元字符

          1、字符匹配:和基本正則表達式元字符相同

          2、次數匹配:和基本正則表達式元字符不同,無須轉義字符\            

                        *:

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

                        ?:匹配其前面的字符0或1次;即前面的字符可有可無

                        +:匹配其前面的字符至少一次

                        {m}:匹配前面的字符m次

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

                        {0,n}:匹配前面的字符至多n次

                        {m,\}:匹配前面的字符至少m次

           3、錨定匹配:和基本正則表達式元字符相同

           4、分組匹配:和基本正則表達式元字符不同,無須轉義字符\

                        ()

                        后向引用基本正則表達式元字符相同

            5、或者:

                    a|b

                    C|cat:C或cat 

            NOTE:fgrep不支持正則表達式搜索,只搜索固定字符串。

                    如:

                       fgrep.png

練習:

            1、顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩種方式)

                (1)、grep -i '^s' /proc/meminfo

                        練習1.png

                 (2)、grep '^[Ss]' /proc/meminfo

                        練習1第二種方法.png

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

                   grep -v '/bin/bash$' /etc/passwd

                        練習2.png

            3、顯示/etc/passwd文件中ID號最大的用戶的用戶名

                   sort -t: -k3 -n /etc/passwd|tail -1|cut -d: -f1

                        練習3.png

            4、如果用戶root存在,顯示其默認的shell程序

                    id root &> /dev/null && grep '^root\>' /etc/passwd | cut -d: -f7

                        練習4.png

            5、找出/etc/passwd中的兩位或三位數

                    grep –color=auto '\<[0-9]\{2,3\}\>' /etc/passwd

                        練習5.png

            6、顯示出/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面存非空白字符的行

                    grep '[[:space:]]\+[^[space]]\+' /etc/rc.d/rc.sysinit

                        練習6.png

            7、找出“netsat -tan”命令的結果中以‘LISTEN’后跟0、1或多個空白字符結尾的行

                    netstat -tan|grep 'LISTEN[[:space:]]*$'

                        練習7.png

            8、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell的行

                    useradd bash

                    useradd basher

                    useradd testbash

                    useradd -s /sbin/nologin nologin

                    grep '^\([[:alnum:]]\+\>\).*\1$' /etc/passwd

                        練習8.png

              9、顯示當前系統root、centos或user1用戶的默認shell和UID(使用egrep)

                    egrep '^(root|user1|centos)\>' /etc/passwd|cut -d: -f3,7

                        練習9.png

              10、找出/etc/rc.d/init.d/function文件(cnegtos6)中某單詞后面跟一個小括號的行

                    egrep -o '^[_[:alpha:]]+\(\)' /etc/rc.d/init.d/functions

                        練習10.png

              11、使用echo輸出一個路徑,使用egrep取出其基名

                    echo '/mnt/sdc' |egrep -o '[^/]+/?$'|cut -d'/' -f1

                        練習11.png

       

  

原創文章,作者:Net18-天津-康康,如若轉載,請注明出處:http://www.www58058.com/14112

(0)
Net18-天津-康康Net18-天津-康康
上一篇 2016-04-05
下一篇 2016-04-05

相關推薦

  • 馬哥教育網絡班20期+第2周課程練習

    一、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。     1、cat:用于連接文件并打印到標準輸出設備上,常用來顯示文件的內容         命令使用格式     &nb…

    Linux干貨 2016-06-23
  • Nginx反向代理原理、壓測及模塊功能的實現

    基本架設 反向代理模塊 緩存功能的實現 修改報文首部IP 向后端轉發時是否讓客戶端知道 在http中定義緩存基本屬性 定義當后端服務宕機時過期緩存生效條件 報文首部模塊,自定義報文首部 負載均衡模塊1 負載均衡模塊2 負載均衡模塊的常用調度方法1 負載均衡常用調度方法2 與http想等的動態負載均衡模塊1 與http想等的動態負載均衡模塊2 這里讓我們對之前…

    2016-10-30
  • mount掛載,dd 工具,配置配額系統,RAID陣列,邏輯卷管理器LVM

    mount mount掛載 vim /etc/fstab 將常用的掛載的設備寫入系統表中 文件掛載配置文件             /etc/fstab /etc/fstab每行定義一個要掛載的文件系統;   &nbsp…

    Linux干貨 2016-09-01
  • nfs實驗

    實驗要求: (1) 創建一個共享mydata,路徑為/mysql/data,客戶端1掛載至/mydata;而后客戶端1主機安裝mysql或mariadb,將數據目錄設定為/mydata,要確保mysql服務能正常 運行,但數據目錄位于nfs server上; (2) 客戶端2主機使用類似客戶端1主機的方式掛載mydata共享至本地的/mydata目錄,而后,…

    Linux干貨 2016-10-24
  • 淺談Linux中的用戶和組

    又到了周六,日常寫博客的日子。 上周模模糊糊的寫了第一篇博客,大概知道了怎么寫,但是這周就比以往不同了,腦子中已經有了思路,那寫起來就會更加詳細易懂。 這周學了很多知識點,但是我想對Linux 用戶和組進行詳細的描述。 一、用戶(Username/UID) 用戶分為兩種:管理員和普通用戶     管理員root  UI…

    2017-07-22
  • lamp的編譯安裝

    基于http的php模塊模式 一、需要準備的軟件:     apr-1.5.0.tar    apr-util-1.5.3.tar    httpd-2.4.9.tar        mysql-5.5.33-…

    Linux干貨 2016-06-22

評論列表(1條)

  • stanley
    stanley 2016-04-05 22:49

    寫標簽提高文章收錄率,樣式上建議使用markdown

欧美性久久久久