Grep家族和正則表達式詳解

1.grep家族的概念


grep : 支持使用基本擴展表達式

egrep:支持使用擴展正則表達式

fgrep:不支持使用正則表達式

作用:強大的文本搜索工具,根據用戶指定的“pattern(過濾條件)”對目標文本逐行進行匹配檢查,打印出符合條件的行

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


2.grep命令詳解


用法:grep [OPTIONS] PATTERN [FILE]...

常用選項:
--color=auto:對匹配到的文本着色後高亮顯示
-i:不區分字符大小寫
-o:僅顯示匹配到的文本自身
-v,--invert-match:反向匹配
-E:支持擴展的正則表達式
-q,--quiet,--silient:靜默模式,不輸出任何信息
-F :支持使用固定字符串,不支持正則表達式,相當於fgrep
-G, --basic-regexp :支持使用基本正則表達式
-p, --perl-regexp :支持使用pcre正則表達式
-e PATTERN, --regexp=PATTERN:多模式機制
-f FILE, --file=FILE:FILE爲每行包含一個pattern的文本文件,及grep script
-A NUM, --after-context=NUM:顯示匹配到的後面幾行
-B NUM, --before-context=NUM:顯示匹配到的前面幾行
-C NUM, -NUM, --context=NUM:顯示匹配到的前後各幾行


使用示例:

wKioL1beJpGhVp6FAAAn6dRIWf8841.png

wKiom1beJomwD9J-AAAkdLmyeD8773.png

由於grepegrep會用到正則表達式,所以在後面會結合正則表達式再一起演示。


3.正則表達式作用及元字符


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

正則表達式引擎:利用正則表達式模式分析給定文本的程序。

而正則表達式又分爲兩類:

(1)基本正則表達式

(2)擴展正則表達式


wKioL1beMYbzBlVhAAUBUYyFMwk678.jpg


注意,找出上下兩張圖片哪裏不同?

基本正則表達式元字符和擴展正則表達式元字符是有所不同的!


wKioL1beM0SAorC2AAVYxf0RAcg823.jpg


4.grep命令結合正則表達式的應用


(1)字符匹配

找出 /etc/passwd文件中帶有nologin的行

grep "[nologin]" /etc/passwd


(2)次數匹配

找出 /etc/passwd文件中的三位或四位數

grep -o "\<[0-9]\{3,4\}\>" /etc/passwd
egrep -o "\<[0-9]{3,4}\>" /etc/passwd


(3)位置錨定

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

grep -v "bash$" /etc/passwd


(4)分組應用

在/etc/passwd找出其用戶名與shell名相同的用戶

egrep "^([a-z0-9]+)\>.*\1$" /etc/passwd


(5)綜合應用

找出ifconfig命令結果中的IP地址

ifconfig | egrep "\<inet[[:space:]]+.*[0-9]\>"

找出/etc/grub2.cfg文件中,以至少一個空白字符開頭,後面又跟了非空白字符的行

egrep "^[[:space:]]+[^[:space:]]*" /etc/grub2.cfg

找出/proc/meminfo文件中,所有以大寫或小寫c開頭的行;至少用三種方式實現

egrep "^(c|C)" /tmp/meminfo
grep "^[Cc]" /tmp/meminfo
grep -i "^c" /tmp/meminfo


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