Mozart的劍(文本處理工具)——叁劍(grep、正則表達式)

之前的句子

煙鎖池塘柳 炮鎮海城樓

因荷而得藕 有杏不需梅

認識于小林寒風的一篇小說《鳳山遺夢》

grep

grep是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。

作用:文本搜索工具,根據用戶指定的模式對目標文本逐行進行匹配檢查;打印匹配到的行。模式:由正則表達式字符及文本字符所編寫的過濾條件

用法:

grep [OPTIONS] PATTERN [FILE…]

簡單示例:

Mozart的劍(文本處理工具)——叁劍(grep、正則表達式)

grep命令選項

–color=auto  :對匹配到的文本著色顯示,(CentOS7中“別名”alias中已設置)

-v  :顯示不被pattern匹配到的行,反向匹配行。

-i  :忽略字符大小寫

-n  :顯示匹配的行號

-c  :統計匹配的行數

-o  :僅顯示匹配到的字符串

-H, –with-filename當搜索多個文件時,顯示匹配文件名前綴

-h–no-filename當搜索多個文件時,不顯示匹配文件名前綴

-q  :靜默模式,不輸出任何信息(注重執行過程,不注重執行的結果)

-e  :實現多個選項間的邏輯or關系

示例:grep –e root –e magedu /etc/passwd

Mozart的劍(文本處理工具)——叁劍(grep、正則表達式)

-w  :匹配整個字符串

-E  :使用ERE,擴展正則表達式egrep

-F  :相當于fgrep,一個換行符分隔的字符串的集合fgrep,不支持正則表達式。

-A#  after,打印匹配本身以及后#行行

-B#  before, 打印匹配本身以及前#行行

-C#  context, 打印匹配本身以及前后各#行行

正則表達式

REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。簡單來說,正則表達式是通過一些特殊字符的排列,用以查找、替換、刪除一行或多行文字字符串

正則表達式可分為兩類:基本正則表達式:BRE,擴展正則表達式:ERE

按元字符分類:字符匹配、匹配次數、位置錨定、分組,根據元字符分類我們一一介紹兩類正則表達式。

基本正則表達式BRE

用法:grep [OPTIONS] PATTERN [FILE…]

元字符分類:

1)字符匹配:

. :匹配任意單個字符

[] :匹配指定范圍內的任意單個字符

[^] :匹配指定范圍外的任意單個字符

[:alnum:] :字母和數字

[:alpha:] :代表任何英文大小寫字符,亦即A-Z,a-z

[:lower:] :小寫字母[:upper:]大寫字母

[:blank:] :空白字符(空格和制表符)

[:space:] :水平和垂直的空白字符(比[:blank:]包含的范圍廣),任何產生空白的字符。

[:cntrl:] :不可打印的控制字符(退格、刪除、警鈴))

[:digit:] :十進制數字

[:xdigit:] :十六進制數字

[:graph:] :可打印的非空白字符

[:print:] :可打印字符

[:punct:] :標點符號

2)匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數

* :匹配前面的字符任意次,包括零次無限次

.* :任意長度的任意字符

\? :匹配其前面的字符01

\+ :匹配其前面的字符至少1

\{n\} :匹配前面的字符n

\{m,n\} :匹配前面的字符至少m次,至多n

\{,n\} :匹配前面的字符至多n

\{n,\} :匹配前面的字符至少n

3)位置錨定:定位出現的位置

^ :行首錨定,用于模式的最左側

$ :行尾錨定,用于模式的最右側

^PATTERN$ :用于模式匹配整行

^$ :空行

^[[:space:]]*$ :空白行

\<或或\b詞首錨定,用于單詞模式的左側

\>或或\b詞尾錨定;用于單詞模式的右側

\<PATTERN\>匹配整個單詞

4)分組:

\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,例如:\(root\)\+

分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1,\2,\3,…其中涉及后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身\1表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符(具體用法可查看擴展正則表達式中的舉例)

\|:邏輯關系or 或

示例:顯示/proc/meminfo文件中以大小s開頭的行

Mozart的劍(文本處理工具)——叁劍(grep、正則表達式)

擴展的正則表達式ERE

用法:egrep [OPTIONS] PATTERN [FILE…]  其中:egrep等價于grep –E

元字符分類:

1)字符匹配:

. :任意單個字符

[] :指定范圍的字符

[^] :不在指定范圍的字符

2)次數匹配:

:匹配前面字符任意次

?  :01

1次或多次

{m}  :匹配m

{m,n}  :至少m,至多n

3)位置錨定:

^  :行首

$ :行尾

\<,\b :語首

\>,\b :語尾

4)分組:

():將一個或多個字符捆綁在一起,當作一個整體進行處理,例如:\(root\)\+分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1,\2,\3,…,其中涉及后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身\1表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符

示例:后向引用,

顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行。

 cat /etc/grub2.cfg | grep “^\([[:blank:]]\)\{1,\}[^\1]” 

Mozart的劍(文本處理工具)——叁劍(grep、正則表達式)

|:邏輯關系 或 or (相似基本正則表達式)

簡單對比一下就會發現,基本正則表達式和擴展正則表達式的區別就在于拓展正則表達中好多符號可以不用加“\”轉義字符,除了后向引用“\1、\2…”和位置錨定“\b、\>…

文本處理工具系列圓滿結束,以后發現需要補充的會及時更新,最后的往往是最重要的,此次總結可能存在疏漏,請各位大佬批評指正。

文本處理工具系列<1>http://www.www58058.com/82973       <2>http://www.www58058.com/83083

原創文章,作者:Mozart,如若轉載,請注明出處:http://www.www58058.com/83512

(0)
MozartMozart
上一篇 2017-08-03 11:32
下一篇 2017-08-03 19:36

相關推薦

  • Linux文件查找工具之find “大寶劍”

    一、文件查找工具常用軟件 locate:     locate命令其實是find -name的另一種寫法,但是要比后者快得多,原因在于它不搜索具體目錄,而是搜索一個數據庫/var/lib/locatedb,這個數據庫中含有本地所有文件信息。Linux系統自動創建這個數據庫,并且每天自動更新一次,所以使用locate命令…

    Linux干貨 2016-03-12
  • sed命令解析

    處理文件的工具sed Stream EDitor, 行編輯器 一次只讀一行,只處理一行,不對源文件做處理,至輸出到屏幕上模式空間 sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space), 接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往…

    Linux干貨 2016-08-11
  • 那些年我們一起追過的緩存寫法(二)

    原文出處: 蘑菇先生   上次主要討論緩存讀寫這塊各種代碼實現。本篇是就上次的問題接著來,繼續看那些年我們各種緩存用法。 一:緩存預熱 上次有同學問過。在第一次加載時,我們的緩存都為空,怎么進行預熱。 單機Web情況下,一般我們使用RunTimeCache。相對于這種情況下: 1:我們可以在啟動事件里面刷新 1 2 3 4 vo…

    Linux干貨 2015-03-04
  • N25第六周作業

    vim編輯器 基本模式: 編輯模式,命令模式 輸入模式 末行模式: 內置的命令行接口;   打開文件: # vim [options] [file ..] +#:打開文件后,直接讓光標處于第#行的行首; +/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的行首;   模式轉換: 編輯模式:默認模式 編輯模式 &…

    Linux干貨 2017-02-15
  • 文本處理工具-習題

    1 、找出ifconfig 命令結果中本機的所有IPv4地址 [root@centos7 ~]# ifconfig |head -2 |tail-1 |cut -dn -f2 |cut -d" " -f2 2 、查出分區空間使用率的最大百分比值 [root@centos7 ~]# df |cut -c44-46 |sort -n|tail…

    Linux干貨 2016-08-15
  • linux重裝grub,并且設置多重引導

    一、利用linux安裝盤(U盤,或者光盤等),啟動計算機 二、選擇troubleshotting==》Rescue a Centos system==》Continue 三、在shell中輸入如下命令     chroot /mnt/sysimage     grub2-install /dev/vda   …

    Linux干貨 2017-04-28
欧美性久久久久