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 22:46
下一篇 2016-04-05 22:49

相關推薦

  • php的serialize序列化和json性能測試

    最近需要對大數組做存儲,需要在serialize序列化和json之間做了選擇。因此需要做了性能測試。 在php5.2之前對數組存儲的時候,大都使用serialize系列化。php5.2之后,開始內置了 JSON 的支持。 在網上看到有些資料說:json_encode和json_decode比內置的serialize和unserialize…

    Linux干貨 2015-04-07
  • 正則表達式—正則表達式詳解

    grep使用正則表達式進行匹配時,將大大提高效率和精準性,正則表達式概括分為基本正則表達式和擴展正則表達式。 一、基本正則表達式   字符匹配元字符         .        &nb…

    Linux干貨 2016-07-04
  • 為你的網絡傳輸加把鎖(OpenSSL)

    互聯網形成的初期,更多關注的是設備之間通過網絡相互訪問功能的實現,我們都知道,兩個設備之間要想相互通信,就必需遵循某種協議,于是早期的互聯網也出現來眾多的協議,比如傳輸層最著名的協議就是tcp和udp,而應用層比較著名的協議有:http、ftp、pop、smtp、dns、telnet等等,而這些協議這開發初期,更多是關注功能的實現,數據這網絡上傳輸是明文方式…

    Linux干貨 2015-12-06
  • CentOS下獲取幫助

    CentOS中獲取幫助 在使用和學習CentOS系統時,我們可能會遇上不熟悉的命令,需要獲取幫助。在很多情況下,我們無法通過網絡獲取幫助,這個時候我們就需要自己通過查看系統幫助文檔來解決問題。下面就來介紹獲取幫助的方法: 1、 獲取簡單的幫助信息:whatis COMMAND   2、獲取比較詳細的命令幫助信息:help COMMAND;COMMA…

    2017-07-15
  • N26 – 第三周作業

    1、列出當前系統上所有已登錄的用戶的用戶名,同一用戶登錄多次只顯示一次     ~]# who -u |cut -d ' ' -f1|uniq -u 2、最后登錄到當前系統的用戶的相關信息     ~]#id $(last | h…

    Linux干貨 2017-01-03
  • Shell編程之select循環&函數詳解

    一、select循環        功能:主要用于創建菜單,菜單按數字順序排列。并將PS3變量的值用作用戶輸入提示。用戶的選擇被保存在內置變量REPLY中。也可以和case語句結合,在select循環中對用戶的輸入作出判斷并處理。      &nbs…

    Linux干貨 2016-08-21

評論列表(1條)

  • stanley
    stanley 2016-04-05 22:49

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

欧美性久久久久