grep詳解

grep詳解

簡介:grep:(global search regular expression(RE))and  print out the line

文本搜索工具,根據用戶指定的文本模式對目標文件進行逐行搜索,顯示能夠被模式所匹配到的行。



正則表達式:是一類字符所書寫出來的模式(PATTERN)


模式分爲:基本正則表達式和擴展正則表達式


元字符:不表示字符本身的意義,用於額外功能性的描述


基本正則表達式的元字符:元字符使用引號


grep格式:grep  [option] 'PATTERN'  file


grep選項:

    --color:把匹配到文本顯示顏色,精確匹配

    -E:使用擴展正則表達式

    -v:取反,不能被模式所匹配到的行

    -o:僅匹配被模式匹配到的字符串,而非整行

    -i:不區分字符大小寫

    -C:被模式匹配到的上下各顯示一行


其正則如下:


1、字符匹配:爲了在不同國家的字符編碼中保持一致性使用POSIX(The Portable Operating System Interface)增加了特殊的字符類,其內容如下,但要注意,使用字符匹配時只能做模糊匹配,不能夠精確匹配,例如使用[[:upper:]]不僅能夠匹配到單個的大寫字符,還能匹配到小寫字符,這是因爲工作在貪婪模式下。


貪婪模式:儘可能長的去匹配

    .:任意單個字符

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

    [[:upper:]]:大寫字符,同[A-Z]

    [[:lower:]]:小寫字符,同[a-z]

    [[:digit:]]:數字,同[0-9]

    [[:alpha:]]:任意字符

    [[:alnum:]]:字母加數字

    [[:punct:]]:標點符號

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

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


2、次數匹配:用來指定匹配其前面的字符的次數

    *:任意次

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

    \?:0次或1次

    \{m\}:匹配m次

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

    \{m,\}:至少m次

    \{0,n\}:至多n次


3、位置錨定:用於指定字符出現的位置

    ^:錨定行首,^char

    $:錨定行尾,char$

    ^$:空白行


4、單詞位置錨定:

    \<char:錨定詞首,\bchar

    char\>:錨定詞尾,char\b


5、分組:

    \(string\):string字符去匹配

    


6、引用:

    \n:後向引用,引用前面第n個左括號以及與之對應的右括號中的模式所匹配到的內容

    \(a.b\)xy\1----->a5bxya5b


擴展正則表達式:egrep,同grep -E


1、字符匹配:同正則表達式

2、次數匹配:

    *:匹配其前面的字符任意次

    ?:匹配其前面的字符0次或一次

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

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

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

    {m,}:至少m次

    {0,n}:至多n次

3、錨定:

    ^:行首

    $:行尾

    \<,\b:詞首

    \>,\b:詞尾

4、分組:

    ():分組

    |:或者,字符或者


fgrep:不解析正則表達式,直接按字符去匹配


例題:

1、  顯示/proc/meminfo文件中以大小寫s開頭的行

# grep  -i “^s” /proc/meminfo

# grep  “^[Ss]” /proc/meminfo

 

2、  取出默認shellbash的用戶

# grep “bash$”/etc/passwd |cut  -d: -f1

# grep -E “bash$”/etc/passwd|cut  -d: -f1

 

3、  取出默認shellbash的且其ID號最大的用戶

# grep “bash$”/etc/passwd | sort  -n  -t:  -k3|tail -1|cut  -d: -f1

# grep -E “bash$” /etc/passwd | sort  -n  -t:  -k3|tail  -1|cut  -d: -f1

 

4、  顯示/etc/rc.d/rc.sysinit文件中,以#開頭,後面跟至少一個空白字符,而後又有至少一個非空白字符的行

grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}"/etc/rc.d/rc.sysinit

grep  -E “^#[[:space:]]{1,}[^[:space:]]{1,}”/etc/rc.d/rc.sysinit

 

5、  顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行

# grep "^[[:space:]]\{1,\}"/boot/grub/grub.conf

# grep -E"^[[:space:]]{1,}" /boot/grub/grub.conf

 

6、  找出/etc/passwd文件中一位數或兩位數

# grep --color=auto “\>[[:digit:]]\{1,2\}\>” /etc/passwd

# grep --color=auto -E "\<[[:digit:]]{1,2}\>" /etc/passwd

 

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

# ifconfig | grep -E--color=auto"\<[1-9][0-9][0-9]\>\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}"


8、  查看當前系統上root用戶的所有信息

# grep “^root\>”  /etc/passwd

# grep"^root\>" /etc/passwd

 

9、  添加用戶testbashbashbasher,而後查找出當前系統上用戶名和shell相同的用戶

# useradd bash

# useradd testbash

# useradd  basher

# grep “^\([[:alnum:]]\{1,\}\)\>.*\1$”/etc/passwd

# grep --color=auto -E "^([[:alnum:]]{1,})\>.*\1$" /etc/passwd


10、             找出netstat -tan命令結果中以LISTENESTABLISHED結尾的行

# netstat -tan| grep"[LISTEN|ESTABLISHED]$"

# netstat -tan| grep -E "(LISTEN|ESTABLISHED)\>"

 

11、             取出當前系統上所有用戶的shell,要求:每種shell只顯示一次,並按升序顯示

cut  -d: -f7 /etc/passwd|sort  -u


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章