Linux shell基礎(四)正則表達式與grep命令 beta

一、正則表達式

之前學習find命令時,就已經接觸過一些簡單的正則,那麼我們現在來學習一些複雜的正則。首先,我們還是來複習什麼是正則表達式,看這個教程先,一定要多看幾遍,至少知道正則大概長什麼樣子。(轉載至https://deerchao.net/tutorials/regex/regex.htm )正則就是有規律的一串字符串,用來描述一個特定的內容,正則適合用來處理字符串,不太適合處理數學邏輯。學好正則對編寫shell腳本有很大的好處,所有的shell腳本大部分都涉及到正則表達式。各種編程工具中也需要使用正則。

用grep sed awk去處理字符串
能不能寫好shell腳本php
ngix配置文件中也有正則
正則核心符號
。一個任意字符

  • 個*
    ? 零個或1個
  • 一個或多個
    ^ 開頭
    # 末尾

二、grep命令

(一)grep命令簡介

用於過濾文件中的字符,(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。系統本身通過/etc/profile.d目錄下的colorgrep.sh文件做了別名==grep --color,能夠方便的顯示找到的行。

用法: grep [選項]... PATTERN [FILE]...
grep -cniv ‘關鍵字(正則)’ 文件路徑
選項
-i 不區分大小寫,默認情況下grep不區分關鍵字大小寫
-c 行數
-n 顯示關鍵詞所在行號
-v取反(使用較多)
-r 遍歷所有層級子目錄
-A後面跟數字,過濾出符合要求的行以及下面的n行
-B後面跟數字,過濾符合要求的行以及上面的n行
-C後面跟數字,過濾符合要求的行以及上下各n行

擴展正則 grep -E ==sed -r ==awk

反覆練習,掌握正則表達式
首先做個準備工作,把/etc/passwd文檔拷貝到其他路徑下,如/tmp下做試驗

(二)基本用法示例

1、過濾出關鍵字root所在的行並顯示行號。

grep -n 'root' /etc/passwd

Linux  shell基礎(四)正則表達式與grep命令 beta

可以看到有顏色標識關鍵字。

2、統計某一關鍵字出現的行數

grep -c 'nologin' passwd

Linux  shell基礎(四)正則表達式與grep命令 beta

下面那個15就是說nologin這個關鍵字出現了15次

3、搜索某一關鍵字出現的行,然後把沒有出現關鍵字的行過濾出來

grep -vn 'nologin' passwd

Linux  shell基礎(四)正則表達式與grep命令 beta

4、搜索整個文件夾,在文件內容中招root。(注意與find命令找到的東西的區別)

grep -r 'root' /etc

Linux  shell基礎(四)正則表達式與grep命令 beta

紫色是文件的路徑,搜索出來的東西很多,grep把/etc下所有包含root的文件中的root字所在的行和所在的文件信息都列了出來。

5、-ABC 作用演示,能列出關鍵字所在的行和臨近的行。

grep -A2 'root' passwd
grep -B2 'root' passwd
grep -C2 'root' passwd

Linux  shell基礎(四)正則表達式與grep命令 beta

Linux  shell基礎(四)正則表達式與grep命令 beta

Linux  shell基礎(四)正則表達式與grep命令 beta
-C選項會把搜到的行的附近的行都列出來,當然如果搜索的目標在頭上或者文尾,就不會列相應的行。

grep+正則表達式(regexp)用法舉例

命令寫法:grep -(cirvnABC) 'regexp' 文件或目錄路徑

精髓在regexp的寫法,如何正確的把想要的東西用正則表達出來。

1、把含有0到9十個數字任意一個字符的行列出來

grep '[0-9]' passwd

Linux  shell基礎(四)正則表達式與grep命令 beta

取反再搜索下
沒了,說明passwd文件中每一行都帶有數字
Linux  shell基礎(四)正則表達式與grep命令 beta
這裏說明[0-9]==[0123456789]

2、把不以#號開頭的行打印出來,
這條命令經常用於查看程序或者系統的配置文件,這種文件經常有大段的以'#'開頭的註釋行,直接看很麻煩。

grep -vn '^#' /etc/ssh/sshd_config

Linux  shell基礎(四)正則表達式與grep命令 beta

還是有空行,我們要再把空行過濾掉。

grep -vn '^#' /etc/ssh/sshd_config|grep -v '^$'

3、顯示test.txt文檔中含有r.o關鍵字的行

grep 'r.o' test.txt

Linux  shell基礎(四)正則表達式與grep命令 beta

.號表示任意一個字符,a-z,A-Z,0-9,特殊號等等。

4、搜索test.txt中形如'r*o'的行

grep 'r*o' test.txt

Linux  shell基礎(四)正則表達式與grep命令 beta

注意這個正則的匹配結果,“r*o”可以代表的東西是隻要以零個或任意多個r開頭o結尾的字符,ro肯定可以,o也可以因爲他表示0個r和1個o,rrro,rro這些肯定可以。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章