正則表達式以及Linux文本搜索工具grep

一正則表達式

regual Expression  簡稱REGEXP

定義:由一類特殊字符以及文本字所編寫的模式,其中有些字符不表示其字面意義,而用于統配和統配功能


分類:

    基本正則表達式:BRE 貪婪模式(盡可能長地去匹配符合模式的內容

    擴展表達式:ERE

BREERE區別:元字符不同

 基本正則表達式元字符

   字符匹配、次數匹配、位置錨定、分組及引用

   一、字符匹配

       .:匹配任意單個字符

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

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

    \d:匹配數字

     \s:匹配空格

     \w:匹配任意字母數字下劃線或漢字

    

[:digit:] :0-9

[:alpha:]所有的大小寫

[:upper:]:所有大寫字母

[:lower:]:所有小寫字母

[:alnum:]:所有字母和數字

[:punct:]:所有的標點符號

[:space:]:空格和tab

二、匹配次數:用在要指定其出現的次數的字符的后面,用于限制其前面字符出現的次數

*:匹配其前面的字符任意次;0,1,多次;

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

 \?:匹配前面的字符01

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

 \{m\}:匹配前面字符m

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

 

  三、位置鎖定

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

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

          ^Pattern$:用于pattern來匹配某行

          ^$;空白行

          單詞:非特殊字符組成的連續字符都稱為單詞

          \<\b:詞首錨定,用于模式的最左側

       \> \b:詞尾錨定,用戶模式的最右側

 

 四、分組及引用(后向引用)(重點理解)

    分組符號\(\):將一個或多個字符捆綁在一起,當一個整體進行處理

    分組意義:分組括號中的模式匹配到的內容會被正則表達式引擎自動記錄到內存的變量中

    引用這些變量:\1:模式從左起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符。

 擴展的正則表達式

擴展正則表達式元字符

 字符匹配

   .:匹配任意單個字符

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

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

[:digit:] :0-9

[:alpha:]所有的大小寫

[:upper:]

[:lower:]

[:alnum:]

[:punct:]

[:space:]意義和正規表達式意義相同

 

次數匹配

  *:匹配其前面的字符任意次;0,1,多次;

    .*:任意長度的任意字符,不包含換行符號

    ?:匹配前面的字符01

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

 {m}:匹配前面字符m

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

 

位置錨定

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

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

    \<\b:詞首錨定,用于模式的最左側

    \> \b:詞尾錨定,用戶模式的最右側

分組及引用

      分組符號()

        a|b :ab

        c|cat :Ccat

        (c|C):cat Cat

二正則表達式之應用一:grep

grep定義:

作用:文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢查;打印匹配到的行

 模式:由正則表達式的元字符及文本字符做編寫的過濾條件

全拼:Global search regular  experssion an print out the line

grep egrep fgrep:區別及之間轉換

grep:支持正規的正則表達式 ;grep -E=egrep  grep -F=fgrep

egrep:支持擴展正則表達式    ;egrep -G=grep

fgrep:不支持正規表達式

用法

grep [OPTINONS]  PATTER  FILE ()

    選項

–color=auto 自動為匹配的字符著色

 

-i ignorecase 忽略字符大小寫

-o:只顯示字符串的本身

-v–inver –match顯示不被模式匹配的行

-E 支持擴展的正則表達式

-F 支持匹配的字符串

-q 安靜模式既不輸出任何信息

-A 數字n:顯示搜索匹配到的前n行也顯示

-B 數字n:顯示搜索匹配到的后n行也顯示

-C 數字n:前后n行都顯示

-w :以單詞進行搜索

-n 顯示匹配的行號

-c統計匹配的行數

   – e:實現多個選項間的邏輯or關系grep –e ‘cat ’ – e ‘dog’ file

 

grep 結合正則表達式的實例引用:

實例一:搜索文件中含有root的用戶并且不區分大小寫,并且只將匹配的字符打印出來

        31.png

實例二:顯示含有root單詞或者hello單詞的行

        32.png

實例三:-q模式不將結果顯示到屏幕上(一般用于腳本的編寫)

35.png

實例四:grep 結合正則表達式使用,顯示出含有"rt 、rot或者roo….(任意個o)t的行并顯示行號36.png

實例五:分組應用 添加用戶 bash、 testbash、 basher以及nologin(其shell為/sbin/nologin),而后找出 /etc/passwd文件中用戶名同shell名的行

37.png

更多實例詳見:

20160804課后作業



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

(0)
wangnannanwangnannan
上一篇 2016-08-07 14:17
下一篇 2016-08-07 22:05

相關推薦

  • 第二周作業

    # 第二周作業 ##1.文件管理類命令 ###cp   復制 * 單元復制 如果目標文件不存在,會自動創建 如果已經存在,會覆蓋 * 多源復制 目標必須是目錄,分別復制每個文件至目標目錄中,并保持原名 > -i: 交互提醒 > -f: 強制覆蓋,不交互 > -r: 遞歸復制目錄 > -d: 如果復制的是符號鏈接,不找源文件,…

    Linux干貨 2016-12-09
  • CentOS 7 安裝 mysql-5.7.14

    在centos7上安裝 路上遇過各種坑 把在centos7正確安裝mysql-5.7.14分享一下 1. CentOs7 默認的數據庫為MariaDB,先卸載MariaDB,否則安裝mysql,引起沖突 rpm -qa mariadb rpm -e –nodeps mariadb 2. 準備好工作環境 mkdir /application&nbs…

    Linux干貨 2017-05-07
  • Bob大叔和Jim Coplien對TDD的論戰

    今年春節時,我寫了一篇《TDD并不是看上去的那么美》,在這篇文章中我列舉了一些關于使用TDD的一些難點和對TDD的質疑,后來出現了一些爭論(可參見那篇文章的評論),以及Todd同學的《TDD到底美不美》,還有infoQ中文上的那個幾乎沒有營養離線討論。今天,有網友給我推來一個英文版infoQ的視頻——“Coplien and Martin Debate TD…

    Linux干貨 2016-08-15
  • sed 流編輯器使用詳解

    一、Stream EDitor, 行編輯器   sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出…

    2016-08-10
  • LVM work?。。?

    1、創建一個至少有兩個PV組成的大小為20G的名為testvg的VG;要求PE大小為16MB, 而后在卷組中創建大小為5G的邏輯卷testlv;掛載至/users目錄.     (1)查看分區大小 [root@localhost ~]# lsblk NAME   MAJ…

    Linux干貨 2016-09-01
欧美性久久久久