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
下一篇 2017-04-06

相關推薦

  • linux基礎命令

    顯示當前系統正在使用的shell:echo ${SHELL}  注意$在這里表示輸出的內容是變量命令提示符:prompt[root@localhost ~]# 表示管理員用戶 $表示普通用戶修改提示符格式 PS1=“[\e[31m][\u@\h \w]\$[\e[0m]”\h 主機名簡稱\H 主機名\w 當前…

    Linux干貨 2017-04-05
  • 0812 find 作業

    0812作業 1、查找/var目錄下屬主為root,且屬組為mail的所有文件 [root@CentOS 7 ~]# find /var -user root -a -group mail /var/spool/mail [root@CentOS 7&nbsp…

    Linux干貨 2016-08-13
  • 通過堡壘機代理SSH運行Ansible(譯)

    有一種常見的網絡安全模式是阻止私有網絡外部對應用服務器的所有連接(指除了業務數據外其它的連接,如后臺管理系統和內部業務系統。譯者注),然后使用 DMZ 區域中的 堡壘機 來選擇性的將到服務器的流量加入白名單。 我們有這樣的一個服務器池,只允許來自特定 IP 地址的 SSH 流量。這些服務器還由 Ansible…

    Linux干貨 2015-02-14
  • LVS-dr模型

    網絡拓撲圖 需三臺主機 要在主機rs上做系統內核的限制 vs主機上配置vip和在rs主機上在lo環配置vip 那個先開始都行 rs主機上在lo環配置vip必須要晚于于在rs主機做內核的限制 在VS主機上配置VIP #ifconfig ens33:0 172.18.0.33 network 255.255.255.2550 broadcast 172.18.0…

    Linux干貨 2017-05-17
  • 內置數據結構,列表及其方法

    List:列表有若干個元素,元素可以是任意對象,元素有順序,可以使用索引和迭代,使用線性結構,使用[ ]進行描述,在內存中的空間是連續的,每個元素在內存中的空間是一樣的………列表是可變的,列表不能一開始就定義大小,列表索引不可以超界   列表索引l.index(),從左向右搜索,發現第一個匹配的,自動返回搜索的值的索引;匹配不到,拋出異常Value…

    Linux干貨 2018-03-25
  • N25-第三周作業

    N25第三周作業 博客作業 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@ip-172-31-25-9 ~]# who|awk '{print $1}'|sort -u ec2-user [root@ip-172-31-25-9&n…

    Linux干貨 2017-02-06
欧美性久久久久