一、grep命令
grep(global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行。
模式:由正則表達式字符及文本字符所編寫的過濾條件
二、grep命令格式
grep [OPTIONS] PATTERN [FILE…]
grep root /etc/passwd
grep "$USER" /etc/passwd(變量)
grep '$USER' /etc/passwd
grep `whoami` /etc/passwd(命令替換)
三、grep命令選項
–color=auto:對匹配到的文本著色顯示
alias grep='grep –color=auto'在centos7中默認是著色顯示的
-v:顯示不能夠被模式匹配到的行,其實就是取反的意思
匹配除root用戶以外的其他用戶信息
-i:忽略字符大小寫
不管是小寫字母還是大寫字母都能匹配
-n:顯示匹配的行號
顯示出匹配到信息行號,方便查看它的位置
-c:統計字符的行數
匹配到的信息總共有多少行
-o:僅顯示匹配到的字符串
把所有匹配到的root字符串顯示出來
-q:靜默模式,不輸出任何信息
只關心命令執行與否,不再終端上顯示信息,可以用echo $?判斷
-A#:after,后#行
顯示匹配到的并且顯示匹配到的后三行
-B#:before,前#行
顯示匹配到的并且顯示匹配到的前三行
-C:context,前后各#行
顯示匹配到的信息前后各兩行
-e:實現多個選項間的邏輯or關系(默認是或者的關系)
grep –e ‘cat ’ -e ‘dog’ file
把帶有root和baah關鍵字的信息顯示出來
-w:整行匹配整個單詞
-E:使用ERE
這個選項就是egrep,往回看有詳細解釋
四、正則表達式詳解
1、REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
2、程序支持:grep, vim, less,nginx等
3、分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
grep -E, egrep
4、正則表達式引擎:
采用不同算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)
5、元字符分類:字符匹配、匹配次數、位置錨定、分組
6、可以使用man 7 regex查看
五、基本正則表達式之字符匹配
. :匹配任意單個字符;
匹配以r開頭以t結尾中間任意兩個字符
[] :匹配指定范圍內的任意單個字符
匹配以r開頭以t結尾中間a-z之間任意單個字符的單詞
[^] :匹配指定范圍外的任意單個字符
匹配以r開頭以t結尾中間除了b-z之外任意單個字符的單詞
[:digit:]:表示所有數字
[:lower:]:表示所有小寫字母
[:upper:]:表示所以大寫字母
[:alpha:]:表示所有字母,包括大小寫
[:alnum:]:表示所以字母和數字
[:punct:]:表示所有標點符號
[:space:]:表示空格和tab
六、基本正則表達式之匹配次數
用在要指定的額字符后面,用于指定前面字符要出現的次數
*:匹配前面的字符任意次,包括0次
.*:任意長度的任意字符
\?:匹配其前面的字符0或1次
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\}:匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
七、基本正則表達式之位置錨定
^:行首錨定:用于模式的最左側
表達以root開頭的行
$:行尾錨定:用于模式的最右側
表達以bash結尾的行
^PATTERN$:用于模式匹配整行
^$:空行
^[[:space:]]$:空白行
刪除空白行
\<或\b:詞首錨定,用于單詞模式的左側
\>或\b:詞尾錨定,用于單詞模式的右側
\<PATTERN\>:匹配整個單詞
八、基本正則表達式之分組
將一個或者多個字符捆綁在一起,當作一個整體進行處理
如:\(root\)\+ 表示root重復一次以上
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部變量中,這些變量的命令方式為:\1,\2,\3,…
\1:從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;
后向引用:引用前面的分組括號中模式所匹配字符(而并非模式本身)
九、練習:
1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)
2、顯示/etc/passwd文件中不以/bin/bash結尾的行
3、顯示用戶rpc默認的shell程序
4、找出/etc/passwd中的兩位或三位數
5、顯示/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行
6、找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行
7、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin),而后找出/etc/passwd文件中用戶名同shell名的行
8、顯示Ip地址
十、egrep及擴展的正則表達式
egrep= grep -E
egrep[OPTIONS] PATTERN [FILE…]
擴展正則表達式就是grep -E,但是他們表達的方式使用有些不同
十一、egrep正則表達式之字符匹配
. 任意單個字符
[] 指定范圍的字符
[^] 不在指定范圍的字符
字符匹配和grep的用法相同
十二、egrep正則表達式之次數匹配
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
可以看出egrep正則表達式的次數匹配表達方式比grep少了"\"
十三、egrep正則表達式之位置錨定
^:行首
$ :行尾
\<, \b :語首
\>, \b :語尾
位置矛錨定和grep表達方式一樣
十四、egrep正則表達式之分組表達
()
后向引用:\1,\2,…
分組表達方式比grep少了"\"
十五、egrep正則表達式之或者方式表達
a|b
C|cat: C或cat
(C|c)at:Cat或cat
十六、egrep的練習
1、顯示當前系統root、mage或wang用戶的UID和默認shell
2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行
需要注意的是擴展正則表達式中()表示的是分組的意思,所以需要加上轉義字符
3、使用egrep取出/etc/rc.d/init.d/functions中其基名(basename)
4、使用egrep取出上面路徑的目錄名
5、統計以root身份登錄的每個遠程主機IP地址的登錄次數
6、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255
[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]25[0-5]
7、顯示ifconfig命令結果中所有IPv4地址
8、正則表達式表示身份證號
9、正則表達式表示手機號
echo "18883797175" | grep -E -o "\<1[3578][0-9]{9}\>"
10、正則表達式表示郵箱 |
|
egrep "\<([[:alnum:]]+|_)*@([[:alnum:]]+\.)+[[:alnum:]]+" sid.txt 11、正則表達式表示QQ號 grep –E –o “\<[1-9][0-9]{4,12}\>” |
|
原創文章,作者:xiaoqing,如若轉載,請注明出處:http://www.www58058.com/30263