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: 錨定詞尾,其前面的任意字符必須作為單詞的尾部出現
分組:
abab*
后向引用
\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..el..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][0?9].*\1$' /etc/inittab
查找當前系統上名字為student(必須出現在行首)的用戶的帳號的相關信息, 文件為/etc/passwd
?grep '^student\>' /etc/passwd | cut -d: -f3