grep、egrep、fgrep的用法與特性詳解

[轉載自]http://tanxw.blog.51cto.com/4309543/1361993git

開篇
       學習Linux也有一段時間了,對Linux多少也算是有點了解了,越是瞭解也就越對這個系統有興趣,從0基礎開始,已經學習了兩週了吧,說實在的,很 多的東西都是邏輯的問題,而學習Linux就是要熟悉命令,命令不少,要記的東西也不少,多得能夠你讓頭皮發麻,不過話又說回來了,既然選擇了這門技術, 那就義無反顧的去作好作專,好了,總結一下這兩週來感受學起來比較用力的部分。正則表達式

 

正文之:grep的詳細介紹
       grep和egrep是如今感受比較難的一部分,主要是符號多,看得眼花瞭亂。

       grep(global search regular expression and prind out the line)全稱就叫全面搜索正則表達式 並打印行出來,簡單來講就是文本搜索工具,根據用戶指定的文本搜索模式對目標文本進行搜索,顯示可以所匹配的行,固然,也能夠把grep看也是一個文本過 慮器。

       格式:grep [options]... 'PATTERD模式' file....
       模式:就是一個最基本的字符串    
       如:grep –A 1 '[r][[:punct:]]*[t]' /etc/passwd  ''裏的內容就是模式

grep的經常使用選項:
       -v:反向匹配、顯示不能別模式匹配到的行;
       例:取出/etc/fstab不包含#號的行
       gerp –v "#" /etc/fstabexpress

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@localhost xiao] # cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Feb 10 10:38:04 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg0-root    /                       ext4    defaults        1 1
UUID=99e81364-46cb-4795-974a-6cc0ab91a46f /boot                   ext4    defaults        1 2
/dev/mapper/vg0-usr     /usr                    ext4    defaults        1 2
/dev/mapper/vg0-var     /var                    ext4    defaults        1 2
/dev/mapper/vg0-swap    swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@localhost xiao] # grep -v "#" /etc/fstab
/dev/mapper/vg0-root    /                       ext4    defaults        1 1
UUID=99e81364-46cb-4795-974a-6cc0ab91a46f /boot                   ext4    defaults        1 2
/dev/mapper/vg0-usr     /usr                    ext4    defaults        1 2
/dev/mapper/vg0-var     /var                    ext4    defaults        1 2
/dev/mapper/vg0-swap    swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

 

       -o:僅匹配被模式匹配到的字串,而非整行,就是僅顯示匹配到的內容
       例:只顯示/etc/fstab爲mapper的字串
       grep -o "mapper" /etc/fstabbash

1
2
3
4
5
[root@localhost xiao] # grep --color=auto -o "mapper" /etc/fstab
mapper
mapper
mapper
mapper

 

       -i:不區分大小寫對文本進行匹配搜索app

       wKioL1MIRVWwAigMAABuWOYUTi0180.jpg


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

       -A #:顯示模式匹配到的行以及後面的N行 #表明你要顯示多少行工具

       例:顯示/etc/passwd中shutdown用戶後面3行學習

       wKiom1MIJFbBJB0TAADVEQp00Vw654.jpg


       -B #:顯示模式匹配到的行以及前面的N行spa

       例:顯示/etc/passwd中shutdown用戶上面2行3d

       wKioL1MIJQCgbbqwAACoQoIIoQM153.jpg


       -C #:顯示模式匹配到的行以及上下的N行code

       例:顯示/etc/passwd中shutdown用戶上下面2行

       wKiom1MIJZOwuHJlAAC-Tllmg7k700.jpg

 

   其實,要用好grep的強大搜索功能,那就不得不說說正則表達式了:
   正則表達式就是一類字符所書寫出來的模式(pattern)、正則表達式基本上都是由元字符組成;
   那什麼是元字符呢:元字符不表示字符自己的意義,而是用於額外功能性的描述。
   基本正則表達式的元字符:學習正則表達式主要是來學習其元字符的用法後慢慢組合這些元字符來表達到正則表達式的使用,grep在默認狀況下只支持基本正則表達式。

注意:
   模式當中一但包含元字符必定要用''或""號引發來,單雙引號均可以、只不過若是其中出現了變量、而且咱們但願作變量替換的話那就要使用""雙引號了、不然能夠不加區分的使用。


   那就來講說元字符的通配:
       .(點號):匹配任意的單個字符的
       例:grep "r..t" /etc/passwd
       rt加上兩點被匹配到的只有4個字符,點號表示的是單個字符

       wKiom1MIMODQF-6wAACjXrjomz0277.jpg


      []:指定範圍內的任意的單個字符
           [0-9] [[:digit:]]:表示匹配0到9的任意單個數字、兩種表示方法均可以
           [a-z] [[:lower:]]:表示匹配小寫的a到z的任意單個字母、即a-z
           [A-Z] [[:upper:]]:表示匹配大寫的A到Z的任意單個字母、即A-Z
           [[:alpha:]]:表示英文大小寫字母、即:a-z,A-Z
           [[:space:]]:表示包含的空白字符、即空格鍵,tab鍵
           [[:alnum:]]:表示包含數字大小寫字母、即0-9,A-Z,a-z
           [[:punct:]]:表示包含標點符號、即:" ' ? ! ; : # $...

 

       例:顯示/etc/fstab下含有數字的行

       grep --color [0-9] /etc/fstab

       wKiom1MIMcKyjJx6AAHGRgi8BNg162.jpg

 

       例:顯示/etc/fstab中包含大寫字母的行

       grep --color "[[:upper:]]" /etc/fstab        

       wKioL1MIMqmSV3XFAAEXjoMqCFg545.jpg


    [^]:表示指定範圍外的任意單個字符、就是使用了脫字符取反

        例:顯示/etc/fstab中數字之外的內容

        grep --color [^[:digit:]] /etc/fstab

       wKioL1MINR-jMVKxAAHcomJRJkQ071.jpg


   字符的次數匹配:用來匹配其前面的字符的次數的
           *:(星號)匹配其緊挨着星號的字符出現任意次
               例:x*y就是x能夠出現意次、包括0次
           .*:(點星)匹配任意長度的任意字符
           \?:表示其前面的字符出現0次或者1次、\是轉譯字符
               例:x\?y:能夠匹配到的只有xy和y
           \{m\}:匹配m次  如:x\{4\}y表示y前面的x出現4前就能夠被匹配到
           \{m,n\}:至少m次,至多n次
           \{m,\}:至少m次
           \{0,n\}:至多匹配n次、0不能夠省略

 

            例:找出/etc/fstab文件中一位數或兩位數

           grep --color '\<[0-9]\{1,2\}\>' /etc/fstab

           \{1,2\}:表示0-9的數字出現的至有1位、至多有2位、

           wKioL1MINz-C9BQNAAGLPoJJ2qQ535.jpg


   位置錨定符:用於指定字符出現的位置
           ^:用於錨定行首,如(^Char) 匹配到的字符必須出現有行首的
           $:用於錨定行尾,如(Char$) grep 'bash$' /etc/passwd
           ^$:空白行、查找一個文件中所出現的空白行  ^hello$表示只有hello的行

 

           例:顯示/etc/fstab中以#號開頭的行

           grep --color "^#" /etc/fstab

           wKiom1MIOU_D3iLmAADoBRKfGD8531.jpg


   單詞的錨定:
           \<char:錨定詞首,\<[r]表示一行以r開頭的單詞均可以匹配、也能夠使用\b表示
           char\>:錨定詞尾,一行以r開頭的單詞均可以匹配、\b
           \<hello\>:表示精確錨定hello這個單詞
           \<h…o\>:表示以h開頭、以o結尾、中間跟了任意三個字符的單詞

 

           例:顯示/etc/passwd中以stu開頭的單詞

           grep --color "\<stu" /etc/passwd     只要是以stu開頭的單詞都會被匹配到

           wKioL1MIOomhPD_NAAGB9xe3l0Y589.jpg

 

   分組元字符:
           \(\):分組  \是轉譯字符  
           例:\(ab\)*xy
           ab括起來表示一個組了,表示xy前面的ab組現出任意次,能夠被匹配到的
           abxy,ababxy,ababababxy,abababababababxy,......

   引用: 對分組的字符塊進行引用
           \1:後向引用,引用前面的第一個左括號以及與之對應的右括號中模式所匹配到的內容
           \2:後向引用,引用前面的第二個左括號以及與之對應的右括號中模式所匹配到的內容
           .......


           例:\(a.b\)xy\1 能夠匹配到的有(abxyab不能夠匹配到)
           akbxyakb,a3bxya3b,aYbxyaYb

           例:咱們來看這個例子、找出如下love與之對應的lover、like與之對應的liker

           He like his lover.
           She love her liker.
           He love his lover.
           She like her liker.

          wKiom1MIThPBv5PAAABjf81TDQo797.jpg

 

正文之:egrep的詳細介紹
       egrep:使用擴展正則表達式來構建模式,至關於grep –E、一般寫成egrep、用法基本上跟grep的相同、只是有些不須要\轉譯

   元字符:字符匹配

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

   次數匹配:
          *:匹配其緊挨着星號的字符出現任意次
          ?:表示其前面的字符出現0次或者1次
          +:匹配其前面的字符至少1次
          {m}:匹配其前面的字符m次
          {m,n}:至少m次,至多n次
          {m,}:至少m次
          {0,n}:至多n次

 

        例:找出/etc/fstab文件中一位數或兩位數

       egrep --color '\<[0-9]{1,2}\>' /etc/fstab  {}不須要轉譯

       wKioL1MIP6PDdqM_AAHTjWq39Sc923.jpg


   作位置錨定:
        ^:行首錨定
        $:行尾錨定
        \<:詞首
        \>:詞尾

   分組:
       ():分組
       |:或者  ab|xy意思爲ab或者xy  a(b|x)y意思爲aby或者axy

正文之:fgrep的詳細介紹
   fgrep:fash,它不解析正則表達式、想找什麼就跟什麼就能夠了;
       例:
       fgrep "/bin/bash" /etc/passwd

 

       例:顯示/etc/fstab中含有defaults的行

       fgrep --color "defaults" /etc/fstab

       wKiom1MIQOHxaJCCAAE_77vJH6U784.jpg

 

結束        經常使用的大概的內容應該就這些吧,這些都是學習當中的基本用法和我我的的筆記,總結並記下,以便之後查找,同時,雖然是剛學習的,也但願我我的的總結能夠幫到更多的人,哦了,很少說了,就總結到這裏了,歡迎大神來指點。

相關文章
相關標籤/搜索