grep:
grep英文全名: Global search REgular expression and Print out the line.
作用:文本搜尋工具,根據使用者指定的"模式(pattern)"逐行去搜尋目标文本,列印比對到的行;
模式:由正規表達式的元字元及文本字元所編寫的過濾條件;
元字元:字元不表示其字面意義,而用于表示通配或控制功能;
Grep指令分為分兩類:
基本正規表達式:BRE
擴充正規表達式:ERE
指令格式
grep [OPTIONS] PATTERN [FILE...]:
選項:
--color=auto:對比對到的串做高亮顯示;
-v:顯示模式比對不到行;
-i: 忽略字元大小寫;
-o: 僅顯示能夠被模式比對到的串本行;
-q: 靜默模式;
-E:使用擴充的正規表達式;
基本正規表達式的元字元:
字元比對:
.: 比對任意單個字元;
[]:比對指定範圍内的任意單個字元;
[^]:比對指定範圍内的任意單個字元;
字元集合:
[:lower:]:小寫字母
[:upper:]:大寫字母
[:alnum:]:字母數字字元。在 ASCII 中,等價于:[A-Z,a-z,0-9]
[:digit:]:數字0-9
[:space:]:空白字元,包括空格,tab,回車,換行,vertical tab, 和 form feed.在 ASCII 中, 等價于:[ \t\r\n\v\f]
[:punct:]:标點符号字元
[:alpha:]:字母字元。在 ASCII 中,等價于:[A-Za-z]
示例:顯示passwd中r+字母+字母+t 的行

次數比對元字元:用于要指定其次數的字元的後面;
*: 前面字元出現任意次;
示例:建立grep.txt内容為,
abxy
xay
xxxxxxxy
顯示任意個"x"+"y"的行。
\?:0或1次;
\+:1或多次;
\{m\}:精确限制為m次;
\{m,n\}: 至少m次,至多n次,[m,n]
\{0,n\}:至多n次;
\{m,\}:至少m次;
.*: 比對任意長度的任意字元;
位置錨定:
^: 行首錨定;用于模式的最左側;
$: 行尾錨定;用于模式的最右側;
\<, \b: 詞首錨定;用于表示單詞的模式的左側;
\>, \b:詞尾錨定;用于表示單詞的模式的右側;
\<,\>同時使用,r開頭,t結尾
^$: 空白行;
分組:\(\)
分組的小括号中的模式比對到的内容,會在執行過程中被正規表達式引擎記錄下來,并儲存内置的變量中;這些變量分别是\1, \2, ...
\1: 從左側起,第一個左括号,以及與之配對的右括号中間的模式所比對到的内容;
\2:
...
後向引用:使用變量引用前面的分組括号中的模式所比對到的字元;
練習:
1、顯示/etc/passwd檔案中以bash結尾的行;
2、顯示/etc/passwd檔案中的兩位數或三位數;
3、顯示'netstat -tan'指令結果中以'LISTEN'後跟0個、1個或多個空白字元結尾的行;
4、添加使用者bash,testbash, basher以及nologin使用者(nologin使用者的shell為/sbin/nologin);而後找出/etc/passwd檔案中使用者名同shell名的行;
擴充的正規表達式:
grep家庭有三個指令:
grep:基本正規表達式
-E: 擴充正規表達式
-F:不支援正規表達式
egrep:擴充正規表達式
fgrep:不支援正規表達式
擴充正規表達式的元字元:
.: 任意單個字元
[]:制定範圍
[^]:範圍以外
次數比對:
*:任意長度的任意字元
?: 0次或1次;
+: 1次以上;
{m}: 精确比對m次;
{m,n}: 至少m次,至多n次;
錨定:
^: 錨定行首
$: 錨定行尾
\<, \b:錨定詞首
\>, \b:錨定詞尾
分組:()
後向引用:\1, \2, ...
或者:
a|b
C|cat: 不表示Cat或cat,而表示C或cat;
要寫成(C|c)at,才表示Cat或cat;
1、顯示目前系統上root、centos或user1使用者的預設的shell和UID;
2、找出/etc/rc.d/init.d/functions檔案中某單詞(單詞中間可以存在下劃線)後面跟着一組小括号的行;
3、使用echo輸出一個路徑,而後egrep找出其路徑基名;
進一步地:使用egrep取出其目錄名;