linux grep manual

名稱
    grep – 打印匹配的行
語法:

    grep [option] pattern [file...]
    grep [option] [-e pattern] | -f file [file]

簡介
    grep 就是從文件或者標準輸入中搜索你給的樣式,默認把匹配到的行打印下來。
    除grep外,還有其他兩個程序可以用,egrep和fgrep。egrep等同于grep -E,frep等同于grep -F。直接使用egrep和fgrep的方法被丟棄了,提供這兩個命令時是為了和歷史版本相兼容。

選項(option)   

        --help  輸出幫助信息
        -V ,--version  打印grep 的版本號


    選擇匹配類型:(Macher Selection)

        -E ,--extended-regexp ,   模式是一個擴展正則表達式
        -F ,--fixed-strings      ,        模式是一個由斷行符分隔的定長字符串
        -G,--basic-regexp ,             模式是基本正則表達式,默認就是這
        -P,--perl-regexp ,               模式是perl正則表達式


    匹配控制:
      

        -e pattern ,--regexp=pattern ,    使用pattern作為匹配操作。指定多次匹配操作
        -f  file,--file=file             從文件中獲得匹配模式
        -i ,--ignore-case                 在輸入的文件和匹配模式中都忽略大小寫,
        -v,--invert-match                 打印不匹配的行
        -w,--word-regexp ,               強制匹配僅完全匹配單詞,  單詞必須和匹配內容一樣才打印
        -x,--line-regexp ,              強制模式匹配一行,文件里面行的內容必須和匹配模式一樣才打印
[object Object]

[object Object]
[object Object]
[object Object]

一般輸出控制:

        -c,--count ,       不輸出匹配的內容,僅僅打印匹配到的行數,和-v一塊使用,就是打印沒匹配的行數        
        --color[= WEHN],    帶顏色在終端打印匹配的內容,顏色通過環境變量GREP_COLORS定義, WEHN可以是never,auto,和always        
        -L,--files-without-match          只顯示不匹配的文件名        
        -l,--files-with-match            只顯示匹配的文件名        
        -o ,--only-matching              打印僅僅匹配到的部分。       
        -q ,--quiet,--silent             安靜模式,不輸出任何內容,如果有匹配內容,退出狀態碼為0,       
        -s ,--no-messages                不輸出錯誤信息。
        更好的的做法是不使用-q和-s,而是重定向到/dev/null 中

U{S6RDX}VGF]}7{JOT`JHUE.png

JN4YI}XNLK]T1V5W9()FRS5.png  _S~B9N@MBDJT]O848FX{JM7.png

輸出行前綴控制:

        -b,--byte-offset      在輸出的每一行之前顯示包含字符串的行的文件中的字節偏移量,在這里是行偏移量
        -H,--with-filename   打印每次匹配到的文件名,這是默認選項當很多文件要匹配時
        -h ,--nofilename ,    當只有一個文件匹配時,不打印文件名,這是默認選項。
        -n,--line-number  , 打印匹配到的行號

8}IX%DZ{A)CL9%B9LY$LE26.png  

 輸出上下文的行控制

        -A num ,--after-context=NUM      打印匹配到行的后面NUM行,多次模式匹配中間以 -- 分隔
        -B num ,--before-context=NUM     打印匹配的行之前的NUM行放一個行包含一個組分隔符 (--)在接下來的匹配組中。如果指定了-o選項,這個選項就沒有一樣了,同時會給一個警告
        -C NUM,--context=NUM,            打印匹配行的上下NUM行

 文件和目錄選擇:
       

        -a,--text                     加工二進制文件當成文本文件處理。這個選項等同于--binary-files=text
        --binary-files=TYPE 
        -D ACTION ,--device=ACTION    如果輸入文件是一個設備文件,FIFO,或者套接字文件,使用ACTION處理它,默認的ACTION是讀,也就是說設備文件當成一般文件看待,如果ACTION是skip,設備文件會被跳過。
        -d ACTION,--directores=ACTION 如果輸入文件是一個目錄 ,使用ACTION去處理這個目錄,默認的ACTION是讀,也就是把目錄當成一般文件來讀。如果ACTION是skip,目錄會被跳過, 如果ACTION是recurse,grep會遞歸的讀取所有的文件在每一個目錄下面
        --exclude=GLOB               跳過文件匹配GLOB,文件名GLOB可以是*,?,和[..] ,也可以是\ 去引用一個通配符或者反斜杠字符
        --exclude-from=FILE          跳過文件誰的名字匹配任何文件名GLOB的,從FILE中讀取GLOB的。和--exclude差不多
        --exclude-dir=DIR            排除目錄匹配這樣式DIR從遞歸查詢中
        -I                           處理二進制文件,把二進制文件當做什么都沒有,直接跳過
        --inlclude=GLOB              僅僅搜尋匹配GLOB的文件
        -R,-r,--recursive           讀取所有在目錄下面的文件,這等價于-d recurse 選項

 NXUUNF}@E_{%2R5(WU4@{YQ.png

W@T~2S]RZT$F@}NCSA6_[2F.png

A%FF$6I4ZOJNQ}KVLEK1@`0.png

  其它選項:

        --line-buffered 使用行的緩存在輸出上,這個可能導致性能損失
        --mmap 如果可能的話,使用mmap系統調用去讀取輸入,而不是read系統調用。這某些情況下,--mmap導致更好的性能。然而--mmap可能導致無法定義的行為,當一個文件shrinks當grep在操作的時候,或者IO錯誤發生
        -U 把文件當成二進制文件來看,默認情況下,在DOS和windows操作系統下面,grep猜一個文件的類型通過查看文件的前32kB的內容。如果文件是文本,他去掉CR字符從原始文件。這個選項在其它平臺上沒有什么作用
        -z ,--null-data 把輸入當做很多行,每一個終止通過一個NULL字節代替一個新航,就像-Z或者--null選項,這個選項就像sort -z 去加工隨機文件名

正則表達式

        正則表達式是一個模式描述一套字符串。正則表達式就像數學表達式差不多,使用不同的操作符構成一個小的表達式 . 正則表達式幾乎匹配了所有的字符,數字和正則自己。一些特殊的元字符可以通過在前面加一個反斜杠實現引用。


        grep理解三種不同版本的正則表達式語法:basic,extended和perl的。

    字符類和括號類表達式:

        . 匹配任何單個字符       [...]   匹配括號列表里面的單個字符在[]內表示范圍,可以在兩個字符之間加一個 - 代表范圍。 匹配任何單字符在兩個字符之間。默認的 [a-d]匹配[abcd] ,不過也可能匹配[aBbCcDd] ,為了獲得默認的括號表達式類型,你需要設置這LC_ALL環境變量。
            為了匹配一些特殊字符:
                 ] : 把它放在列表首部,  []abcd]  
                ^  :可以放在任何位置除了首部 [abc^d]
                -  :放在最后的位置   [abcd-]
                
[object Object]

        另外有幾個預定義的括號表達式

            [:alnum:]:表示數字與大小寫字母[0-9a-zA-Z]
            [:alpha:]:表示大小寫字母[a-zA-Z]
            [:cntr:]: 表示控制按鍵,Ctrl、Tab...
            [:digit:]:表示數字
            [:graph:]:表示除了空白鍵與Tab鍵外的所有按鍵
            [:lower:]:代表小寫字母
            [:print:]:代表任何可以被打印出來的字節
            [:punct:]:代表標點符號
            [:space:]:代給空白鍵
            [:upper:]:代表大寫字母
            [:xdigit:]:代表十六進制的數字類型

    錨定符

        ^:匹配行首        $:匹配行尾        \< 和 \> 匹配一個字符串的開始和結束 ,也就是牟定單詞。
        \b 相當于\<或\>
        \B  不牟定,類似于\b取反
        \w 等價于 [:alnum:]  
        \W 等價于 [^[:alnum:]]


    重復:

        正則表達式可能重復幾次撇皮
        ? 前面的字符是可選的和只匹配一次
        * 前面的字符可以匹配0此或者更多次
        + 前面的字符至少匹配一次,可以匹配更多次
        {n} 前面的字符精確匹配 n 此
        {n,}前面的字符匹配n此以上
        {,m}前面的字符至多匹配m次
        \(\):向后引用,引用:\1, \2, \3
 
 [object Object]       

[object Object]

   基本正則和擴展正則:

        基本正則之間,元字符,?,+,{,|,(,}和)都丟失了他們特殊的意義,應該使用\?,\+,\{,\(,和、)  
        傳統egrep不支持{  元字符,一些egrep實現了支持 \{  ,一些腳本應該避免 {   在grep -E 中應該使用 [{] 去匹配"{"

 

環境變量:grep的行為被一些環境變量影響。自己man吧。

    總結:博文到這里結束吧。這篇博文,寫的不好,需要時間來不斷完善其中的實例。

    為什么不好?

        1、這種grep例子,都是老生常談,沒有一點點新意,盡管我花了好久時間,時間長不能代表做的好。

        2、grep就只是一個命令,我去看manual手冊,一直在那翻譯,當然翻譯的不夠好,翻譯時好多句式不明白,明白單詞的意思,不一定能夠明白句子的意思。難道還要看源代碼,才能明白其中的原理嗎?目前會用就行了吧。

        3、在這個平臺上面寫的第一篇博文,弄個圖片好久沒弄出來,最后我又撤銷了幾張圖片,都不知道為什么。

   下次寫博客注意的地方?    

        1、不要照著manual手冊翻譯過來,那樣是個人都會翻譯,而是把自己對manual的理解,與整理之后貼出來,有自己的見解。

        2、還要再熟悉熟悉博客平臺,才能用好。

        

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

(0)
艾賀艾賀
上一篇 2015-08-31
下一篇 2015-09-01

相關推薦

  • 文本處理工具基礎應用

                                                      &nbsp…

    Linux干貨 2016-08-07
  • 玩轉linux之啟動篇

        想要玩轉linux,首先明白其啟動流程,這里簡單說明一下: CentOS 6啟動流程:    POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> roo…

    Linux干貨 2016-09-26
  • 馬哥教育網絡19期+第五周練習博客

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;   grep "^[[:space:]]\+.*" /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; &n…

    Linux干貨 2016-06-19
  • Keepalived實現nginx雙主

    一、架構描述與應用 1. 應用場景 大多數的互聯網公司都會利用nginx的7層反向代理功能來實現后端web server的負載均衡和動靜分離。這樣做的好處是當單臺后端server出現性能瓶頸時可以對其進行橫向擴展從而提高整個系統的并發,同時也可以通過后端server提供的http或tcp監控接口對其進行健康檢查實現自動Failover和Failback。&n…

    Linux干貨 2016-07-16
  • 【N25第四周作業】grep

    文本處理工具: Linux上文本處理三劍客: grep, egrep, fgrep:文本過濾工具(模式:pattern)工具; grep:基本正則表達式,-E,-F egrep:擴展正則表達式, -G,-F grep:不支持正則表達式, sed:stream editor, 流編輯器;文本編輯工具; awk:…

    Linux干貨 2016-12-18
  • N21天天第十三周課程練習

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程)   1)共享名為shared,工作組為magedu;   2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;   3)添加s…

    Linux干貨 2016-12-05
欧美性久久久久