最近在復(fù)習(xí)linux基礎(chǔ),發(fā)現(xiàn)grep是個非常值得復(fù)習(xí)整理的一個命令,今天分享一下
grep [OPTIONS] PATTERN [FILE...]
OPTIONS: 參數(shù),常用的-i,-o,-v
PATTERN:文字字符或正則表達(dá)式
FILE:操作文件對象,可操作多個文件
常用參數(shù):
-i:忽略大小寫
-v:顯示文件所有行,默認(rèn)只顯示匹配到的行
-o:只顯示匹配到的字符串
-E:使用擴展的正則表達(dá)式
-A#:#號代表任意非負(fù)整數(shù),顯示匹配到的行的同時,并顯示后續(xù)的#行,A可理解為After
-B# :#號代表任意非負(fù)整數(shù),顯示匹配到的行的同時,并顯示其前面的#行,B可理解為Before
-C# :#號代表任意非負(fù)整數(shù),顯示匹配到的行的同時,并顯示其前面的#行及后面的#行
上面是grep的一些常用操作,而在使用過程中,要想真正發(fā)揮grep的強大功能,必須結(jié)合正則表達(dá)式,下面來簡單介紹一下正則表達(dá)式的內(nèi)容:
正則表達(dá)式:Regular ExPRession :簡寫為REGEXP
正則表達(dá)式的元字符:
*:匹配其前面的字符任意次,這點和我們常用的通配符*不太相同,切記!
.:匹配任意單個字符,要想實現(xiàn)匹配任意長度的任意字符,可以用: .*
?:匹配其前面字符0或一次
{m,n}:匹配其前面的字符至少m次,至多n次
^:行首標(biāo)志
$:行尾標(biāo)志
[]:指定匹配范圍,其中的內(nèi)容為或的關(guān)系,整個只匹配一個字符,如[A-Z],指的是A-Z之間任意一個字母,常用的字符集合有:
[:space:]空格
[:digit:]數(shù)字
[:lower:]小寫字母
[:upper:]大寫字母
[:alpha:]所有字母,包含大寫和小寫
[:panct:]標(biāo)點符號
[:almun:]所有字符
表示任意一個大寫字母,就可以使用[[:upper:]]
/<:其后字符(串)作為單詞首部,如’/<abc’,表示匹配任意以abc開頭的詞
/>:其前字符(串)作為單詞尾部
():內(nèi)容分組,括號里面擴著的,為一組
/#:#號位任意正整數(shù),后向引用,表示引用其前面的第#個分組
|:邏輯或
擴展正則表達(dá)式:
在元字符上,和上面提及的正則表達(dá)式差不多,差別在于擴展正則表達(dá)式在某些字符上面不需要進(jìn)行轉(zhuǎn)義,如(),[]等
上面說了那么多,大概大家都煩了,下面開始實戰(zhàn)一下:
例一:找出/etc/passwd里為nologin的行
命令:grep nologin /etc/passwd
結(jié)果如下(內(nèi)容較多,只顯示部分內(nèi)容):
例二:找出/etc/passwd里為mail的行,并顯示其前兩行,其后三行和前后各一行
其后兩行:
[root@localhost ~]# grep -A 2 -i mail /etc/passwd
其前三行:
[root@localhost ~]# grep -B 3 -i mail /etc/passwd
前后三個一行:
[root@localhost ~]# grep -C 1 -i mail /etc/passwd
結(jié)果如下:
例三:在指定文件里面,找出形如l..e的字符串的行
命令:
[root@localhost ~]# grep 'l..e' test3.txt
結(jié)果如下:
例四:在指定文件里面,找出形如l..e的字符串
命令:
[root@localhost ~]# grep -o 'l..e' test3.txt
結(jié)果如下:
例五:在指定文件里,找出單獨為root字符串的行
命令:
[root@localhost ~]# grep '^root$' test2.txt
結(jié)果如下:
例六:在指定文件里,找出含有root詞的行
命令:
[root@localhost ~]# grep '/<root/>' test2.txt
結(jié)果如下:
例七:找出形如’l..e’,但前后要內(nèi)容要相同
命令:
[root@localhost ~]# grep 'l/(../)e.*l/1e' test3.txt
結(jié)果如下:
例八:使用擴展正則表達(dá)式,完成例七內(nèi)容
命令:
[root@localhost ~]# grep -E 'l(..)e.*l/1e' test3.txt
例九:找出ifconfig里的類似0.0.0.0的內(nèi)容
命令:
[root@localhost~]# ifconfig | grep -E '/<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/>'
結(jié)果如下:
新聞熱點
疑難解答