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:顯示匹配到的前後各幾行
使用示例:
由於grep和egrep會用到正則表達式,所以在後面會結合正則表達式再一起演示。
3.正則表達式作用及元字符
正則表達式由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示其字面意義,而是用於表示控制或通配的功能。
正則表達式引擎:利用正則表達式模式分析給定文本的程序。
而正則表達式又分爲兩類:
(1)基本正則表達式
(2)擴展正則表達式
注意,找出上下兩張圖片哪裏不同?
基本正則表達式元字符和擴展正則表達式元字符是有所不同的!
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