grep、egrep、fgrep命令和正則表達式用法

一、簡介

 1.1、grep說明

   grep命令簡單來說就是linux系統實現文本內容篩選過濾的命令。當我們需要快速定位查找文本(通常是配置文件)中我們需要的內容時,使用grep命令絕對算是最有效的處理方式之一。原因就在于grep可以配合包括“管道”、“正則表達式”等命令完成我們想要的關鍵字篩選過濾功能。個人認為不管是喜歡Linux系統的發燒友,還是DBA、程序員、運維人員、架構師、項目經理等,熟練運用掌握grep命令都是必不可少的。比如在日常工作中令開發人員很頭大的事情就是在查看tomcat中項目運行生成的日志文件,這些日志文件通常內容都非常之多,而快速定位到日志里面的異常錯誤提示信息是必不可少的,這種情況下其中一種解決方案就是采用grep命令來定位查找輸出關鍵信息(當然還有更多其他不錯的解決方案)。

 1.2、正則表達式說明

   正則表達式(英文:Regular Expression)簡單來說就是一種按特定要求定義的符合某種語法規則語義的字符串。采用正則表達式可以幫助我們實現過濾、篩選等常見功能。例如它可以輕松完成校驗電話、郵箱格式是否正確、url攔截匹配等常用功能,減少了一系列不必要的條件判斷,從而提升工作效率。從實用性角度來說,不管是在linux系統中配合grep命令實現關鍵字查找匹配,還是數據庫編寫sql語句,甚至服務端及前端校驗數據安全性等方面都離不開正則表達式,它幾乎可以說是IT從業人士必須要理解掌握的關鍵技術。

二、用法

   首先grep是bash中非常好用的命令,雖然不是系統內置命令,不過一般的linux系統安裝完成之后都會自帶這個命令。grep命令常見用法有三種,分別是grep、egrepfgrep。下面分別介紹如下三種。

  2.1、grep 使用格式如下(關鍵參數標紅):

  grep [OPTIONS] PATTERN [FILE…]

  grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

  例1:實現在passwd文件中搜索root用戶并把搜索結構顯示出來的關鍵字標紅,命令如下:

  grep –color=auto "root" /etc/passwd

  效果如下圖:

  a.png

  例2:只顯示匹配到的關鍵字,不顯示其他內容,命令如下:

  grep –color=auto -o "root" /etc/passwd

  效果如下圖:

  a.png

  例3:如果想一直顯示關鍵字標紅功能,可以定義別名,保證長期有效,如當前root用戶永久生效此配置,

  設置方式如下圖:

  a.png

  例4:搜索結果出現的關鍵字忽略字母大小寫,命令如下:

  grep -i "root" /etc/passwd

  效果如下圖:

  a.png

  例5:實現搜索結果取反操作(顯示為非匹配的搜索結果),命令如下:

  grep -v "abc" test.txt

  效果如下圖:

  a.png

 例6:搜索結果顯示行號,命令如下:

 grep -n "ab" text.txt

 效果如下圖:

 a.png

 例7:查找出匹配的搜索結果前n行、后n行或前后n行,命令如下:

 grep -A 2 "AbC" text.txt

 grep -B 2 "AbC" text.txt

 grep -C 2 "AbC" text.txt

grep、egrep、fgrep命令和正則表達式用法 效果如下圖:

 a.png

 例8:grep命令不僅可以查找文本匹配內容,文件夾和文件也能通過grep配合管道實現查找,命令如下:

   a.png

 2.2、grep配合正則表達式

 2.2.1、字符匹配

 例1:(正則表達式.) 搜索匹配任意單個字符,命令如下:

 grep "a.c" test.txt

 效果如下圖:

 a.png

 例2:(正則表達式[])搜索指定范圍匹配的任意單個字符,命令如下:

 grep "[ad]" test.txt

 效果如下圖:

 a.png

 

 例3:(正則表達式[^])搜索指定范圍匹配的任意單個字符,命令如下:

 grep "[^ad]" test.txt

 效果如下圖:

 a.png

 

 例4:(正則表達式[0-9]或[[:digit:]])搜索指定數字范圍內匹配到的結果,命令如下:

 grep "[0-9]" test.txt 或 grep "[[:digit:]]" test.txt

 效果如下圖:

 a.png

 例5:(正則表達式[a-z]或[[:lower:]])搜索指定小寫字母范圍內匹配到的結果,命令如下:

 grep "[a-z]" test.txt 或 grep "[[:lower:]]" test.txt

 效果如下圖:

 a.png

 例6:(正則表達式[A-Z]或[[:upper:]])搜索指定寫字母范圍內匹配到的結果,命令如下:

 grep "[A-Z]" test.txt 或 grep "[[:upper:]]" test.txt

 效果如下圖:

grep、egrep、fgrep命令和正則表達式用法 a.png

 例7:(正則表達式[[:space:]])搜索匹配單行包含空格的內容,命令如下:

 grep "[[:space:]]" test.txt

 效果如下圖:

 a.png

 例8:(正則表達式[[:punct:]])搜索匹配單行包含標點符號的內容,命令如下:

 grep "[[:punct:]]" test.txt

 效果如下圖:

 a.png

 例9:(正則表達式[[0-9a-z-A-Z]]或[[:alnum:]])搜索匹配單行包含數字和大小寫字母的內容,命令如下:

 grep "[[0-9a-zA-Z]]" test.txt  或 grep "[[:alnum:]]" test.txt 

 效果如下圖:

 a.png

 a.png

 例10:(正則表達式[[a-z-A-Z]]或[[:alpha:]])搜索匹配單行包含大小寫字母的內容,命令如下:

 grep "[[a-zA-Z]]" test.txt 或 grep "[[:alpha:]]" test.txt

 效果如下圖:

 a.png

 2.2.2、次數匹配

 例1:(正則表達式*)搜索匹配單行*左側的任意長度的字符,包含0次1次或多次,命令如下:

 grep "a*" test.txt

 效果如下圖:

 a.png

 例2:(正則表達式.*)搜索匹配單行任意長度的任意字符,包含0次1次或多次,屬于貪婪模式,命令如下:

 grep "a.*" test.txt

 效果如下圖:

 a.png

 例3:(正則表達式\?)搜索匹配單行\?左側字符出現0次或1次,命令如下:

 grep "d\?" test.txt

 效果如下圖:

 a.png

 例4:(正則表達式\+)搜索匹配單行\+左側字符至少出現1次,命令如下:

 grep "a\+" test.txt

 效果如下圖:

 a.png

 例5:(正則表達式\{m\})搜索匹配單行\{m\}左側字符精確出現m次,命令如下:

 grep "a\{2\}" test.txt

 效果如下圖:

 a.png

 例6:(正則表達式\{m,n\})搜索匹配單行\{m,n\}左側字符至少出現m次,至多出現n次,命令如下:

 grep "a\{1,2\}" test.txt

 效果如下圖:

 a.png

 例7:(正則表達式\{0,n\})搜索匹配單行\{0,n\}左側字符最多出現n次,命令如下:

 grep "a\{0,2\}" test.txt

 效果如下圖:

 a.png

 例8:(正則表達式\{m,\})搜索匹配單行\{m,\}左側字符至少出現m次,命令如下:

 grep "a\{m,\}" test.txt

 效果如下圖:

 a.png

 2.2.3、位置錨定

 例1:(正則表達式^)搜索匹配單行錨定行首內容,命令如下:

 grep "^a" test.txt

 效果如下圖:

 a.png

 例2:(正則表達式$)搜索匹配單行錨定行尾內容,命令如下:

 grep "c$" test.txt

 效果如下圖:

 a.png

 例3:(正則表達式^$)搜索匹配空白行內容,命令如下:

 grep "^$" test.txt

 效果如下圖:

 a.png

 例4:單詞錨定:

 (正則表達式\<)實現錨定詞首,也可以用\b實現同樣效果

 (正則表達式\>)實現錨定詞尾,也可以用\b實現同樣效果

 命令如下:

 grep "\<12" test.txt 或 grep "\b12" test.txt

 grep "test\>" test.txt 或 grep "test\b" test.txt

 效果如下圖:

 a.png

 整個單詞錨定:

 (正則表達式\<…\>)實現錨定整個詞,也可以用\b實現同樣效果

 命令如下:

 grep "\<456test\>" test.txt 或 grep "\b456test\b" test.txt

 效果如下圖:

 a.png

 例5:分組錨定:

 (正則表達式\(\))實現分組錨定,分組匹配到的結果字符,自動被grep記憶在內置變量中,這些變量分別是\1、\2 …并且這些變量可以再次被使用。

 \1: 引用,在該模式中自左而右,獲取由第一個左括號以及與之對應的右括號中的模式所匹配到的內容。

 \2: 引用,在該模式中自左而右,獲取由第二個左括號以及與之對應的右括號中的模式所匹配到的內容。

 命令如下:

 grep "\(123\)" test.txt

 grep "\(123\).*\1" test.txt

 grep "\(456\)….\1\(789\)\2" test.txt

 效果如下圖:

 a.png

  2.2.4、egrep 使用說明

  egrep使用格式與grep基本相同(可使用grep -E command實現同樣效果),不過egrep只支持擴展的正則表達式,不支持基本正則表達式。

     命令:egrep PATTERN FILE… 或 grep -E PATTERN FILE…

     egrep支持如下用法:

     字符匹配模式如下:

        .

        []

        [^]

     次數匹配模式如下:

        *: 任意次

        ?:0或1次

        +: 至少1次

       {m}:精確匹配m次;

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

       {m,}:至少m次;

       {0,n}:至多次;

     位置錨定模式如下:

        ^

        $

        \<, \b

        \>, \b

     分組匹配模式如下:

       ()

       引用:\1, \2, …

     或者匹配支持如下:

       a|b:a或b  或兩側的所有內容;

 

 egrep或者匹配示例:

 (正則表達式|)實現或者匹配,命令如下:

 egrep "456|789" test.txt 或 grep -E "456|789" test.txt

 效果如下圖:

 a.png

 2.2.5、fgrep 使用說明

 fgrep不支持正則表達式,只能實現全部關鍵字匹配,個人感覺實際工作中不太常用。

 fgrep示例:

 fgrep "abdc" test.txt

 效果如下圖:

 a.png

三.結尾總結

   grep以及相關正則表達式是linux系統中日常工作開發必須掌握的命令。egrep實現功能基本與grep相同,只是寫法稍有不同,可根據個人習慣選擇采用grep或egrep命令。fgrep因為不支持正則表達式,因此很少使用。



原創文章,作者:鏡花水月,如若轉載,請注明出處:http://www.www58058.com/7040

(1)
鏡花水月鏡花水月
上一篇 2015-08-31 09:57
下一篇 2015-08-31 10:42

相關推薦

  • grep正則表達式及sort、diff等相關命令

    Linux文本處理三劍客: grep:文本過濾工具(模式:patter) sed:stream editor 流編輯器,文本編輯工具 awk:linux上的實現gawk,文本報告生成器(格式化文本) * 正則表達式:Regular Expression,REGEXP,由一類特殊字符及文本字符所編寫的模式,其中有些字符其不表達字面意義,而是…

    Linux干貨 2016-12-29
  • 20 shell腳本編程1

    20 shell腳本編程1 一、雜項知識整理 1、腳本文件格式:     #!/bin/bash     (注釋信息:)     #description:say hello     #vesion:…

    Linux干貨 2016-08-11
  • Linux軟件包管理與實例

    Linux系統的早期,編譯是利用程序代碼生成可執行文件的過程的手動編譯。雖具有一定優勢,但是專業知識要求高,不利于實際操作。因此出現了許多軟件包管理器,最具代表的是由Red Hat 推出的RPM。Yum則有利于解決linux安裝軟件時的依賴性。 所謂依賴性,就是linux系統中的軟件將不同的功能模塊單獨寫入到不同的軟件包中,最后將多個相互依存的軟件包結合起來…

    2017-08-13
  • 第一周博客作業-Linux發行版歷史、哲學思想、FHS、命令格式、幫助等

    All + All – 第一周作業 1.計算機組成及功能 計算機組成 硬件 馮諾依曼體系 CPU 運算器 對數據做算暖蘇運算和邏輯運算 控制器 寄存器等 程序的運行,是CPU通過調用硬盤中的程序至內存中執行來實現的 存儲器 內存 ROM RAM 外存 硬盤 光盤 輸入設備 鼠標、麥克風等 實現指令和參數的輸入 輸出設備 顯示器、打印機等 實現結果…

    Linux干貨 2017-07-02
  • MySQL入門書籍和方法分享

    原文:http://cenalulu.github.io/mysql/mysql-book-for-newbie/           作者: 盧鈞軼     本文羅列了一些適用于MySQL及運維入門和進階使用的書籍。 背景:各大論壇上總是…

    Linux干貨 2015-04-09
  • Linux終端類型

    目錄 1. 終端概述 2. 串行端口終端(/dev/ttySn) 3. 偽終端(/dev/pty/) 4. 控制終端(/dev/tty) 5. 控制臺終端(/dev/ttyn, /dev/console) 6. 虛擬終端(/dev/pts/n) 7. 其它類型   終端概述 終端…

    Linux干貨 2016-10-18
欧美性久久久久