文本處理無非是對文本內容作查看、修改等操做。Linux三劍客: grep、sed 和 awk 命令。正則表達式
處理文本內容,用 Vim 編輯器不是很好嗎?Vim 容許咱們使用鍵盤、鼠標來對文本內容進行交互性地修改,但在某些場景中,咱們可能須要實現對文本內容作自動化的處理,而不是手工處理。express
不少時候,咱們並不須要列出文件的所有內容,而是從文件中找到包含指定信息的那些行,要實現這個目的,可使用 grep 命令。編輯器
grep 命令的由來能夠追溯到 UNIX 誕生的早期,在 UNIX 系統中,搜索的模式(patterns)被稱爲正則表達式(regular expressions),爲了要完全搜索一個文件,有的用戶在要搜索的字符串前加上前綴 global(全面的),一旦找到相匹配的內容,用戶就像將其輸出(print)到屏幕上,而將這一系列的操做整合到一塊兒就是 global regular expressions print,而這也就是 grep 命令的全稱。spa
grep命令可以在一個或多個文件中,搜索某一特定的字符模式(也就是正則表達式),此模式能夠是單一的字符、字符串、單詞或句子。code
正則表達式是描述一組字符串的一個模式,正則表達式的構成模仿了數學表達式,經過使用操做符將較小的表達式組合成一個新的表達式。正則表達式能夠是一些純文本文字,也能夠是用來產生模式的一些特殊字符。爲了進一步定義一個搜索模式,grep 命令支持如表 1 所示的這幾種正則表達式的元字符(也就是通配符)。blog
通配符 | 功能 |
---|---|
c* | 將匹配 0 個(即空白)或多個字符 c(c 爲任一字符)。 |
. | 將匹配任何一個字符,且只能是一個字符。 |
[xyz] | 匹配方括號中的任意一個字符。 |
[^xyz] | 匹配除方括號中字符外的全部字符。 |
^ | 鎖定行的開頭。 |
$ | 鎖定行的結尾。 |
在基本正則表達式中,如通配符 *、+、{、|、( 和 )等,已經失去了它們本來的含義,而若要恢復它們本來的含義,則要在以前添加反斜槓 \,如 \*、\+、\{、\|、\( 和 \)。字符串
grep 命令是用來在每個文件或中(或特定輸出上)搜索特定的模式,當使用 grep 時,包含指定字符模式的每一行內容,都會被打印(顯示)到屏幕上,可是使用 grep 命令並不改變文件中的內容。數學
grep 命令的基本格式以下:grep [選項] 模式 文件名自動化
這裏的模式,要麼是字符(串),要麼是正則表達式。io
選項 | 含義 |
---|---|
-c | 僅列出文件中包含模式的行數。 |
-i | 忽略模式中的字母大小寫。 |
-l | 列出帶有匹配行的文件名。 |
-n | 在每一行的最前面列出行號。 |
-v | 列出沒有匹配模式的行。 |
-w | 把表達式當作一個完整的單字符來搜尋,忽略那些部分匹配的行。 |
注意,若是是搜索多個文件,grep 命令的搜索結果只顯示文件中發現匹配模式的文件名;而若是搜索單個文件,grep 命令的結果將顯示每個包含匹配模式的行。
例如,有一份 emp.data 員工清單,如今要搜索此文件,找出職位爲 CLERK 的全部員工,則執行命令以下:
grep CLERK emp.data
#忽略輸出內容
若是隻想知道職位爲 CLERK 的員工的人數,可使用「-c」選項,執行命令以下:
grep -c CLERK emp.data #忽略輸出內容