在linux種有一句話,叫作一切皆文件。文件有個特色,它是個文本。它能夠讀、能夠寫,若是是二進制文件,它還能執行。這樣的話,咱們在使用linux的時候,多數時間都是要和各式各樣文件打交道的。那麼,熟悉文本的讀取、編輯、篩選就是linux系統管理員的必備技能。linux
幸而,在linux中,有三個很牛逼的文本處理工具。它們分別是:grep、sed、awk。下面咱們用三篇文章來簡單講講他們仨。正則表達式
第一個登場的,是grep。它是(global search regular expression and print out the line,全面搜索正則表達式並將其打印到命令行)的縮寫。它是以行來進行搜索的,同時,以行進行輸出。它能夠直接使用,也能夠經過管道符(「|」)來與其餘命令混合使用,達到更好的切割文本的效果。express
基本用法:ssh
grep 「選項「 」模式「 文件工具
其中,」選項「是指經常使用的幾種功能,」模式「指要搜的正則表達式,文件則表明搜索對象。學習
下面一個一個介紹:測試
* 經常使用的一些功能選項:spa
-v: 顯示版本號命令行
-E: 默認模式爲擴展正則表達式,至關於使用了egrep對象
-F: 默認模式爲固定字符串列表,至關於使用了fgrep
-n: 輸出行數
-v: 反向查找
-i: 忽略大小寫
-o:只顯示被選中的表達式,不顯示整行
-w: 匹配整詞,精確的單詞,不是模糊匹配。單詞的兩邊必須是非字符符號,以保證中間是一個完整的單詞。
-A 行數:匹配到搜索行以及該行下面n行
-B 行數:匹配到搜索行以及該行上面n行
-C 行數:匹配到搜索行以及該行上下n行
* 經常使用的一些模式介紹:
‘^$’:空行
‘.‘: 任意一個字符
[xyz]: x、y、z任意一個
[[:space:]]: 空格及tab
[a-zA-Z]: 至關於[[:alpha:]]
[^123]:除了123之外的字符,這裏的^和通配符裏邊的"^"意義徹底不同,且在正則表達式中,這些符號的意義與通配符中的意義徹底不同。若是按照通配符的標準來學習正則表達式,那就GG了~
[a-zA-Z0-9]: 至關於[[:alnum:]]
[A-Z]: 至關於[[:UPPER:]]
[a-z]: 至關於[[:lower:]]
[[:punct:]]: 至關於標點符號
下面舉幾個例子,來演示如下它們怎麼使用:
我在/tmp下創建了一個test_file,抄了Bob Dylan的《make you feel my love》進去。咱們來測試:
1) cat test_file|grep -w 'love',精準查找關鍵詞'love'.
2) cat test_file|grep -v 'feel my love',grep不會打印帶有'feel my love'的行。
3)cat test_file |grep -A 5 'love',grep會打印找到的love行,並其下邊的5行一塊兒打印。
4)cat test_file|grep -n '^$',輸出空格行行數;若想去除空格行,可使用grep -v '^$';若想去除註釋行,可用egrep -v '#'。
5) 去除/etc/ssh/sshd_config的空格和註釋,並打印行數。其中,-v表示反向輸出;-E表示使用擴展正則表達式;-n表示輸出行數。而'^#|^$'則表示,以"#"開頭的註釋和空行。|表示「或」的意思。