Grep 文本搜索工具與正則表達式

        grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用特定模式匹配(包括正則表達式)搜索文本,并默認輸出匹配行。Grep在實際中對于我們的工作有著很大的作用,用于對文件的搜索,通過由正則表達式字符以及文本字符所編寫的過濾條件來獲取我們想要查找的行或關鍵信息。

Grep語法

  grep
[OPTIONS] PATTERN [FILE…]     
  

             -n :顯示行號

-i :忽略字符的大小寫

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

-e :指定多個匹配條件(或的關系)

-c :顯示統計到的行數   類似于 wc -l 的功能

-v :取反功能,匹配出不包含“PATTERN”的行

-q :靜默輸出,不輸出任何信息,只關心執行結果

-A # after,匹配到的行的后#

-B #  :  before,匹配到的行前#

-C # context,匹配到得行前后各#

-E ==egrep 支持擴展的正則表達式   -F ==fgrep,快速搜索

而且egrepfgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的擴展,支持更多的re元字符,fgrep就是fixed
grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式
中的元字符表示回其自身的字面意義,不再特殊。linux使用GNU版本的grep。它功能更強,可以通過-E、-F命令行選項來使用egrep和fgrep的功能。

grep的工作方式是這樣的,它在一個或多個文件中搜索字符串模板。如果模板包括空格,則必須被引用,模板后的所有字符串被看作文件名。搜索的結果被送到屏幕,不影響原文件內容。

grep可用于shell腳本,因為grep通過返回一個狀態值來說明搜索的狀態,如果模板搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2。我們利用這些返回值就可進行一些自動化的文本處理工作。

Grep命令中允許指定的串語句是一個規則表達式,這是一種允許使用某些特殊鍵盤字符的指定字符串的方法,這種方法中的特殊鍵盤字符可以用于代表其他字符也可以進一步定義模式匹配工作方式。例如:grep “.*hood” essay1。該命令將在文件essay1中搜索,顯示出包含帶有字符串hood的字的每一行。命令行中的點表示的是hood之前可以有任意字符,星號指的是在字符串之前點號所表示的任意字符可以有任意個其中的雙引號是可有可無的,但是當語句中包含短語或者空格時就必須加雙引號

         正則表達式分為兩類

                            基本正則表達式:BRE

                            擴展正則表達式:ERE

基本正則表達式

字符匹配

      . :匹配任意單個字符;

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

         有以下幾種表示方法:

                                               [:digit:] :表示所有數字;

                                               [:upper:]: 表示所有大寫字母;

                                               [:lower:]:表示所有小寫字母;

                                               [:alpha:]:表示所有的字母;

                                               [:alnum:]:表示所有的字母和數字;

                                               [:punct:]:表示所有的標點符號;

                                               [:space:]:表示所有的空白字符;

                                               [1-9]:表示19的數字,包括19;

                                               [a-z]:表示為 a A b B c C … z Z中任意一個字母。

[^] : 匹配除指定范圍內的任意單個字符;例如:[^zhang]:表示除z,h,a,n,g之外的字母

     次數匹配

     *:表示匹配前面的字符任意次;(貪婪模式,能匹配多少就匹配多少)

         例如:grep  “x*y” ———可以是xay,xcsy,也可以是x2aty,但是x不可以,y不可以。

    .* : 表示任意長度的任意字符;

    \?: 表示匹配前面的字符01次,即可有可無;

    \+: 匹配前面的字符至少一次;

    \{m\}: 匹配前面的字符m次;

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

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

    \{0,n\}: 匹配前面的字符最多n次。

    位置錨定

    對特定位置進行定位

             ^
:
行首錨定; $: 行尾錨定;—— ^$ 表示匹配空白行(不包含空格);^[[:space:]]$ 包含空格的空行。

             \<\b :詞首錨定; \>\b :詞尾錨定 —— 例如:\<PATTERN\> 匹配整個單詞

 

    分組

             分組是將多個字符捆綁在一起,當做一個整體進行處理:\( \)  例如:\(xy\)* 表示xy這個整體可以出現任意次 ,后邊用\1,\2..來分別表示之前從左邊開始括起來的每一組  

 示例:      

1、顯示/proc/meminfo文件中以s(不區分大小寫)開頭的行

Grep 文本搜索工具與正則表達式

Grep 文本搜索工具與正則表達式

Grep 文本搜索工具與正則表達式

2、顯示/etc/passwd文件中其默認shell不是/sbin/nologin的用戶

Grep 文本搜索工具與正則表達式

3、找出/etc/passwd文件中的一位數或兩位數

Grep 文本搜索工具與正則表達式

Grep 文本搜索工具與正則表達式

4、顯示/etc/rc.d/rc.sysinit文件中,以#開頭,后面至少跟一個空白字符,而又至少一個空白字符的行

Grep 文本搜索工具與正則表達式

5、找出當前系統上用戶ID和屬組ID相同的用戶

Grep 文本搜索工具與正則表達式

擴展正則表達式

   grep
–e ‘PATTERN’ FILE…

   egrep
‘PATTERN’ FILE…

       字符匹配、字符錨定與基本正則相同;

         次數匹配

                   ?:表示01次;

                   +:至少一次;

                   {m}:精確匹配m次;

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

                   {0,m}:最多m次;{n,}:至少n次。

                   其他與基本相同

         或者

                a|b

         分組()括號無需轉義。

示例:

找出ifconfig命令結果中1-255之間的數字

Grep 文本搜索工具與正則表達式

原創文章,作者:Immortals、zcy,如若轉載,請注明出處:http://www.www58058.com/73360

(0)
Immortals、zcyImmortals、zcy
上一篇 2017-04-15
下一篇 2017-04-16

相關推薦

  • N25第二周

      1,Linux上的文件管理命令都有哪些,其常用的使用方法及其相關示例演示。        文件查看類命令:cat, tac, head, tail, more, less           分屏…

    Linux干貨 2016-12-12
  • 磁盤、文件系統管理

    linux磁盤、文件系統管理 硬盤:機械硬盤、固態硬盤     計算硬盤速度:IoPs:(Io  per  second ) 每秒20次 機械硬盤:     track:磁道     平均尋道時間  &nbsp…

    Linux干貨 2016-08-25
  • Redis 存儲分片之代理服務Twemproxy 測試

    概述 實際業務場景中單點 Redis 容量、并發都是有限的,所以有 Redis Cluster 的需求。 但是官方的 Redis Cluster 一再跳票,還不可用。 只好先使用最簡單的方式:Proxy。有很多可選,但在大范圍生產使用的, Twitter 開源的 Twemproxy  看起來是個理想的選擇 – https://…

    Linux干貨 2015-03-10
  • vim使用方法

    vim是vi的增強版本,具有比vimi更加強大的功能,對于尤其適合編寫腳本,下面總結一下vim的常用方法。 vim三種工作模式。         1. 編輯模式:          &nbs…

    2015-03-18
  • 文本及文件查找練習

    1、顯示當前系統上root、fedora或user1用戶的默認shell;     ~]# cat /etc/passwd | grep "^\(root\|fedora\|user1\)\>" | cut -d: -f1,7    root:/bin/…

    Linux干貨 2016-10-24
  • 文本處理三劍客之sed

    文本處理三劍客之sed sed概述 sed使用示例 sed的高級應用 sed概述 sed, 作為文本三劍客之一,其定位就是一個編輯器, 而且sed是一個流式編輯器(stream editor),其主要功能是過濾和轉換文本。 sed – stream editor for filtering and&…

    Linux干貨 2016-08-12

評論列表(1條)

  • renjin
    renjin 2017-04-21 11:19

    主要介紹了grep命令的詳細用法及示例說明,內容總結的很詳細,排版也很好。繼續努力 !

欧美性久久久久