grep簡介
grep 是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。通常grep有三種版本grep、egrep(等同於grep -E)和fgrep。egrep爲擴展的grep,fgrep則爲快速grep(固定的字符串來對文本進行搜索,不支持正則表達式的引用但是查詢極爲快速)。grep是Linux文本處理三劍客之一。
grep使用方式
grep [options] PATTERN [FILE...]
-i : 忽略字符的大小寫
--color:高亮顯示關鍵字
-v: 顯示沒有被模式匹配到的行
-o:只顯示被模式匹配到的字符串
Pattern: 文本字符和正則表達式的元字符組合而成匹配條件
正則表達式:REGular EXPression, REGEXP
元字符:
.: 匹配任意單個字符
[]: 匹配指定範圍內的任意單個字符
[^]:匹配指定範圍外的任意單個字符
字符集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]
匹配次數(貪婪模式):
*: 匹配其前面的字符任意次
.*: 任意長度的任意字符
\?: 匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{1,\}
\{0,3\}
位置錨定:
^: 錨定行首,此字符後面的任意內容必須出現在行首
$: 錨定行尾,此字符前面的任意內容必須出現在行尾
^$: 空白行
\<或\b: 錨定詞首,其後面的任意字符必須作爲單詞首部出現
\>或\b: 錨定詞尾,其前面的任意字符必須作爲單詞的尾部出現
分組:
\(\)
\(ab\)*
後向引用
\1: 引用第一個左括號以及與之對應的右括號所包括的所有內容
\2:
\3:
Tips
- [root@mysql ~]# alias grep='grep --color'
設置別名 grep默認關鍵字高亮顯示
- 查詢以空白字符數字結尾的行
[root@mysql ~]# grep '[[:space:]][[:digit:]]$' /etc/inittab
- He love his lover. She like her liker. 查詢這樣的內容
[root@mysql ~]# grep '\(l..e\).*\1' test3.test
- 在/proc/meminfo查詢以s或者S開頭的內容
[root@mysql ~]# grep '^[sS]' /proc/meminfo
- 取出默認shell爲bash,且其用戶ID號最小的用戶的用戶名
grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1
- 顯示/etc/inittab中以#開頭,且後面跟一個或多個空白字符,而後又跟了任意非空白字符的行
grep '^#[[:space:]]\{1,\}[^[:space:]]*' /etc/inittab
- 顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行;
grep ':[[:digit:]]:' /etc/inittab
grep ':[0-9]:' /etc/inittab
- 顯示/etc/inittab文件中以一個數字開頭並以一個與開頭數字相同的數字結尾的行
grep '^\([0-9]\).*\1$' /etc/inittab
- 查找當前系統上名字爲student(必須出現在行首)的用戶的帳號的相關信息, 文件爲/etc/passwd
grep '^student\>' /etc/passwd | cut -d: -f3