grep,egrp,fgrep 命令與正則表達式

一 簡介

    grep (global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。

Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的擴展,支持更多的RE元字符, fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,不再特殊。linux使用GNU版本的grep。它功能更強,可以通過-G、-E、-F命令行選項來使用egrep和fgrep的功能。

    正則表達式:又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。

二 grep用法

  1.grep 常用選項

            -v: 顯示不包含匹配文本的所有行。

            -o: 僅顯示匹配的字串,而非字串所在的行

            -i: 忽略字符大小寫

            -n:輸出匹配行的行號

            -q:安靜模式,不打印任何標準輸出

            -E: 擴展正則表達式,相當于egrep,egrep 擴展正則表達式

            -F:固定字符串列表,相當于fgrep,fgrep 不支持正則表達式

            -A:顯示被模式匹配到的行及后#行

            -B:顯示被模式匹配到的行及前#行

            -C:顯示被模式匹配到的行及其前后各#行

            –color=auto :可以將找到的關鍵詞部分加上顏色的顯示

 2.正則表達式:

    a.字符匹配:

            . : 匹配任意單個字符,相當于通配符?;

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

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

    b.常用特殊字符匹配

           [0-9] = [[:digit:]] :匹配數字

           [a-z] = [[:lower:]] : 匹配小寫字母

           [0-9a-zA-Z] = [[:alnum:]] : 匹配大小寫字母或數字

           [a-zA-Z] = [[:alpha:]] : 匹配字母,大小寫字母

           [[:space:]] = \s : 匹配空白字符 

           [A-Z] = [[:upper:]] = :  代表大小字寫母

    c. 次數匹配:

           * :匹配*前面的單個字符任意次,可以為0次;

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

           \?:匹配?前面的字符0或者1次;如果是使用egrep 直接?

           \+:匹配+前面的字符至少1次;如果是使用egrep 直接+ 

           \{m,n\}:匹配其左側的字符至少m次,至多n次;如果是使用egrep 直接{m,n}

           \{m,\}:匹配其左側的字符至少m次 如果是使用egrep 直接{m,}

           \{0,n\}:匹配其左側的字符至多n次   如果是使用egrep 直接{0,n}

           \{m\}:精確匹配其左側的字符m次 如果是使用egrep 直接{m}

    d. 位置錨定:

                     ^ :錨定行首

                     $ : 錨定行尾

                    ^$ :匹配空白行,^[[:space:]]$ 一樣的效果

    e.單詞錨定:

       \< :錨定詞首

       \>:錨定詞尾

       \<PATTERN\>:匹配PATTERN能匹配到的整個單詞

       \b:匹配一個字邊界,即字與空格間的位置

        |: 或的意思 a|b 就是匹配a或者是b

    f.分組及引用:

                     \(\) :將()中字符集合到一起作為一個字符引用,如果是使用egrep 直接()

                     \#:引用,模式中自左而右,而非模式本身

 3.正則表達式的貪婪與非貪婪模式

                     貪婪匹配:正則表達式一般趨向于最大長度匹配,也就是所謂的貪婪匹配。

                     非貪婪匹配:就是匹配到結果就好,就少的匹配字符。

                     默認是貪婪模式;在量詞后面直接加上一個問號?就是非貪婪模式。

三 例子


1.將/etc/passwd,有出現 root 的行取出來,同時顯示這些行在/etc/passwd的行號

grep -n root /etc/passwd

blob.png


2.用 dmesg 列出核心信息,再以 grep 找出內含 eth 那行,要將捉到的關鍵字顯色,且加上行號來表示:

grep -n root /etc/passwd

blob.png

3.將/etc/passwd,將沒有出現 root 的行取出來

grep -v root /etc/passwd

blob.png

4.用 dmesg 列出核心信息,再以 grep 找出內含 eth0 那行,在關鍵字所在行的前兩行與后三行也一起捉出來顯示

dmesg | grep -n -A3 -B2 'eth0'

blob.png

5.搜索cc.txt下aa 關鍵字忽略字母大小寫,命令如下:

grep -i ‘aa' cc.txt

blob.png

6.在/etc/passwd 查找以root開頭的行

grep "^root" /etc/passwd

blob.png

7.在/etc/passwd 查找以nologin結尾的行

grep "nologin$" /etc/passwd

blob.png


創建一個測試文件內容如下

blob.png


8. 在siaz.txt 文件中匹配以the作為單詞首部的行

grep "\<the" siaz.txt

blob.png

9.在siaz.txt 文件中匹配以the作為單詞詞尾的行

grep "the\>" siaz.txt

blob.png

10.在siaz.txt 文件中匹配/etc/passwd中包含單詞"the"的行

grep "\bthe\b" siaz.txt

blob.png

11.在/etc/passwd中 匹配單個字符 r..t

grep "r..t" /etc/passwd

blob.png

12.匹配0個或多個重復位于星號前的字符 :從/etc/passwd中匹配rt、rot、root、roo*t

grep 'ro*t' /etc/passwd

blob.png

13.匹配一組字符中的任意一個, 從/etc/passwd中匹配包含test1或best的行

grep "[tb]est" /etc/passwd

blob.png

14.匹配/etc/passwd中不包含root的行

grep "^[^root]" /etc/passwd   ([^root] 取非root字符,^ 開頭非root的行)

blob.png

15.匹配/etc/passwd中字母o連續出現2次的行

grep "o\{2\}"  /etc/passwd

grep -E "o{2}"  /etc/passwd

blob.png

測試文件bb.txt 內容如下

blob.png

16.匹配文件bb.txtx 中 最少出現m次,最多出現n次

grep "ro\{2,4\}"  bb.txt 

grep -E "ro{2,4}"  bb.txt 

blob.png

分組測試文件cc.txt 內容如下

blob.png

17.匹配cc.txt文件中以2016開頭且以2016結尾的行

grep "^\(2016\).*\1$" cc.txt

grep -E "^(2016).*\1$" cc.txt 

blob.png

18.在cc.txt 文件中分組引用w(es)t 中的es

grep "w\(es\)t.*\1" cc.txt

grep -E "w(es)t.*\1" cc.txt

blob.png

19.匹配cc.txt文件中的數字與大小寫字母

grep "[[:alnum:]]" cc.txt

grep "[0-9a-Z]" cc.txt 

blob.png

20.匹配cc.txt文件的空白鍵

grep "[[:space:]]" cc.txt 

blob.png

21.從/etc/passwd中匹配包含ro字符串,且字母至少出現一次以上的行

grep -E "ro+" /etc/passwd

blob.png

22.在bb.txt 文件中,匹配其roo前導字符0次或1次

grep -E "roo?" bb.txt 

blob.png

23.從/etc/passwd中匹配test1或best1

grep "[t|b]est1" /etc/passwd

blob.png

24.在/etc/passwd上查找用戶id和組id在500到1099之間的行

grep "\<1\?[05][0-9][0-9]\>" /etc/passwd

grep -E "\<1?[05][0-9][0-9]\>" /etc/passwd

blob.png

25.找出ifconfig命令結果中的1-255之間的數字

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

blob.png

26.顯示/etc/passwd文件中其默認shell為/bin/bash的用戶

grep "/bin/bash$" /etc/passwd | sort -t: -k3 -n | tail -1 | cut -d: -f1

blob.png

原創文章,作者:liangkai,如若轉載,請注明出處:http://www.www58058.com/11156

(0)
liangkailiangkai
上一篇 2016-01-18 23:38
下一篇 2016-01-19 15:57

相關推薦

  • 第十二周:httpd和lamp

    看了一下作業內容,發現所有的都在51cto上寫過了。這里就不在做了。 畢竟當時幾篇博客寫下來,還是非常繁瑣的,不想在寫。 文檔地址:RHEL6.8編譯安裝LAMP環境:httpd-2.4+mysql5.6+php5.5;基于LAMP環境部署WordPress: http://afterdawn.blog.51cto.com/7503144/1876171 配…

    Linux干貨 2016-12-09
  • 常用進程查看工具

    進程是我們學習Linux中常常接觸的概念,他是程序被運行起來的一種表現形態。 了解進程的工作狀態,管理進程的工作狀態,可以讓我們更清楚的知道,系統正在做什么,整體的進度是怎么樣的。 想要了解進程的工作狀態,我們就需要借助一些常用的工具來查看,想要對進程進行管理,我們也需要工具來實現。下面我們一起來看一看常用的查看進程工具有哪些,這些工具是如何使用的,有什么特…

    2017-05-09
  • 馬哥教育網絡班19期+第7周課程練習

    1.創建一個10G分區,并格式為ext4文件系統:   (1)要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl;   (2)掛載至/data/mydata目錄,要求掛載時禁止程序自行運行,且不更新文件的訪問時間戳;   fdisk /dev/sdb    part…

    Linux干貨 2016-06-22
  • Linux三劍客之grep

    grep(Globel Search Regular Expression and Printing out the line)全面搜索正則表達式并把行打印出來)是一個強大的文本搜索工具,使用正則表達式搜索文本的文本,并把結果打印出來。Unix家族包括grep、egrep和fgrep。egrep是擴張的正則表達式它支持更多的字符,fgrep是fast gre…

    Linux干貨 2016-08-12
  • bash腳本之練習

    1、編寫服務腳本/root/bin/testsrv.sh,完成如下要求  (1) 腳本可接受參數:start, stop, restart, status  (2) 如果參數非此四者之一,提示使用格式后報錯退出 (3) 如是start:則創建/var/lock/subsys/SCRIPTNAME, 并顯示“啟動成功” 考慮:如果事先已經啟…

    Linux干貨 2016-08-24
  • 計算機構成與Linux基礎知識之一

    簡述計算機構成,Linux如何誕生及主流發行版;簡單命令介紹;如何獲取幫助及Linux目錄命名及功用簡介紹。

    2018-02-26

評論列表(1條)

欧美性久久久久