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