grep、正則表達式

grep、正則表達式

  • grep:文本過濾(模式:pattern)工具
    作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行。
    模式:由正則表達式字符及文本字符所編寫的過濾條件。
  • 正則表達式:由一類特殊字符及文本所編寫的模式,其中有些字符不表示字符字面意義,而表示控制或通配的功能。
    正則表達式分為兩類:基本正則表達式、擴展正則表達式
  • grep工具支持基本正則表達式,egrep支持擴展正則表達式,fgrep快速搜索,不支持正則。

grep

  • grep [OPTIONS] PATTERN [FILE…]
    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
    –color==auto 高亮顯示匹配到的字符串
    -o 僅顯示匹配到的字符串
    -v 取反、顯示不能被pattern匹配到的行
    -i 忽略字符的大小寫
    -n 顯示行號
    -c 顯示統計到的行數,等同于wc -l
    -q 靜默輸出 只關心命令的執行結果 不關心輸出結果
    -e 指定多個條件,條件是或的關系
    -w 匹配整個單詞
    -A 后幾行
    -B 前幾行
    -C 前后幾行 查看日志 搜索關鍵字排查錯誤的時候
    -E === egrep 支持擴展的正則表達式
    -F === fgrep 不支持正則表達式

基本正則表達式

  • 字符匹配
    . :匹配任意單個字符
    [] :匹配指定范圍內的任意單個字符
    [^] :匹配指定范圍外的任意單個字符
    以上[]中的范圍有以下幾種表示方法:

    • [:alnum:] 所有的數字和字符
      [:alpha:] 所有的字母(不區分大小寫)
      [:lower:] 小寫字母
      [:upper:] 大寫字母
      [:space:] 專門匹配空格
      [:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
      [:digit:] 十進制數字 ;[:xdigit:]十六進制數字
      [:graph:] 可打印的非空白字符
      [:print:] 可打印字符
      [:punct:] 標點符號
  • 次數匹配
    用于在要指定次數的字符后面,用于前面的字符要出現的次數:

    *:匹配前面的字符任意次,0 到無窮次
    注:默認情況下,正則表達式是工作在貪婪模式下,能匹配多少就匹配多少
    .* 任意字符出現任意次 
    a* a字符出現任意次 
    \? 匹配前面的字符出現0次或者1次 
    \+ 匹配前面的字符至少1次 
    \{n\} 前面的字符出現n次 
    \{m,n\}匹配前面的字符出現m到n次,m,n是一個范圍 
    \{,n\}匹配前面的字符最多出現n 
    \{m,\}匹配前的字符至少出現m次
    \ 轉義符

  • 位置錨定 
    ^ 錨定行首,用于模式的最左側
    $ 錨定行尾,用于模式的最右側

    ^$ 匹配空行的
    ^[[:space:]] 行首是空白的字符
    ^[[:space:]]*$ 也是 空行
    ^a 以a開頭的行
    b$ 以b結束的行
    ^a.*b$ 以a開頭 中間任意字符 以b結尾的行
    ^a.*[[:space:]]\{3\}.*b$ a開頭跟任意字符,中間出現三次空格再跟任意字符 以b結尾的行
    ^# 以#開頭的行

    \b \b 匹配詞首和詞尾 ;\bPATTERN\b
    \< > 匹配詞首和詞尾 ;\<PATTERN\>

  • 分組 \(\)
    將一個或多個字符捆綁在一起,當做一個整體進行處理,符號:()
    (xy)*ab 表示xy這個整體可以出現任意次`
    注:1、分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式:\1,\2,\3, …
    2、后向引用:引用前面的分組括號中的模式所匹配的字符,而非模式本身

  • 或者 \|
    a \| b
    C \| cat

擴展正則表達式

  • grep -E ‘PATTERN’ FILE…
    egrep ‘PATTERN’ FILE…

  • 字符匹配
    . :匹配任意單個字符
    [] :匹配指定范圍內的任意單個字符
    [^] :匹配指定范圍外的任意單個字符
    以上[]中的范圍有以下幾種表示方法:

    • [:alnum:] 所有的數字和字符
      [:alpha:] 所有的字母(不區分大小寫)
      [:lower:] 小寫字母
      [:upper:] 大寫字母
      [:space:] 專門匹配空格
      [:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
      [:digit:] 十進制數字 ;[:xdigit:]十六進制數字
      [:graph:] 可打印的非空白字符
      [:print:] 可打印字符
      [:punct:] 標點符號
  • 次數匹配
    用于在要指定次數的字符后面,用于前面的字符要出現的次數:

    *:匹配前面的字符任意次,0 到無窮次
    注:默認情況下,正則表達式是工作在貪婪模式下,能匹配多少就匹配多少
    .* 任意字符出現任意次 
    ? 匹配前面的字符出現0次或者1次 
    + 匹配前面的字符至少1次 
    {n} 前面的字符出現n次 
    {m,n}匹配前面的字符出現m到n次,m,n是一個范圍 
    {,n}匹配前面的字符最多出現n 
    {m,}匹配前的字符至少出現m次

  • 位置錨定 
    ^ 錨定行首,用于模式的最左側
    $ 錨定行尾,用于模式的最右側

    ^$ 匹配空行的
    ^[[:space:]] 行首是空白的字符
    ^[[:space:]]*$ 也是 空行
    ^a 以a開頭的行
    b$ 以b結束的行
    ^a.*b$ 以a開頭 中間任意字符 以b結尾的行
    ^a.*[[:space:]]\{3\}.*b$ a開頭跟任意字符,中間出現三次空格再跟任意字符 以b結尾的行
    ^# 以#開頭的行

    \b \b 匹配詞首和詞尾 ;\bPATTERN\b
    \< > 匹配詞首和詞尾 ;\<PATTERN\>

  • 分組 ()
    將一個或多個字符捆綁在一起,當做一個整體進行處理,符號:()
    (xy)*ab 表示xy這個整體可以出現任意次

  • 或者 |
    a | b
    C | cat

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

(0)
ss
上一篇 2017-04-06 19:20
下一篇 2017-04-06 20:12

相關推薦

  • 啟動流程與內核管理

    centos6和centos5啟動流程與內核管理,啟動過程中遇到的系統不能啟動,各個階段該怎么解決

    Linux干貨 2018-01-02
  • 基于mysql的數據庫分析系統(rsyslog)

    rsyslog:日志收集和存儲系統 1.事件在電腦中的日志記錄格式為:     日期時間 主機 進程[pid]:事件內容 2.rsyslog的特性:     多線程;     UDP,TCP,SSL/TLS,RELP; &nbsp…

    Linux干貨 2016-10-23
  • LVS_DR配置

    DR : 192.168.29.150 VIP:192.168.29.100 RS1: 192.168.29.110 VIP:192.168.29.100 RS2:192.168.29.120 VIP:192.168.29.100 RS 配置 1 配置VIP [root@local ~]# ifconfig lo:0 192.168.29.100 netma…

    2017-06-30
  • 關于網絡配置管理

                                                      &nbsp…

    系統運維 2016-09-07
  • apache自動化腳本搭建虛擬主機

    1 基于主機名實現三個虛擬主機 (1).創建網站目錄與測試文件 (2).創建虛擬主機文件(目錄為/etc/httpd/conf.d/下)   (3).修改測試apache主機hosts文件(就不用DNS服務器解析,方便測試),測試httpd配置文件是否有問題,重啟httpd服務   (4)修改測試主機hosts文件(就不用DNS服務器解析…

    Linux干貨 2016-10-09
  • 第一篇博客

    我的第一篇博客以及接下來的每一篇都要獻給linux運維了。第一次接觸linux是在大三的時候,當時并沒有想到以后還會和linux邂逅并以此謀生。 首先就從最基礎的linux分區與掛載點開始了解介紹,我們熟悉的Windows系統下的分區都分配有盤符,像c盤,d盤之類的,用來存放各種軟件和文件。而linux也有自己的分區,并將分區掛載到不同的掛載點上,掛載是指將…

    2017-07-16
欧美性久久久久