linux之grep

一、grep簡介

(1). grep (global search regular expression (RE) and print out the line ),[全面搜索正則表達式並把行打印出來]是一種強大的文本搜索工具,他們使用正則表達式搜索文本,並且把匹配的行打印出來。

(2).grep家族包括grep、egrep和fgrep,其中egrep和fgrep的命令只跟grep有很小的不同。egrep是grep的擴展,支持更多的(RE)元字符.

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


(4)語法說明:

    grep [options] PATTERN [FILE...]

  • -a或--text 不要忽略二進制的數據。

  • -A或--after-context= 除了顯示符合範本樣式的那一列之外,並顯示該列之後的內容。

  • -b或--byte-offset 在顯示符合範本樣式的那一列之前,標示出該列第一個字符的位編號。

  • -B或--before-context= 除了顯示符合範本樣式的那一列之外,並顯示該列之前的內容。

  • -c或--count 計算符合範本樣式的列數。

  • -C或--context=或- 除了顯示符合範本樣式的那一列之外,並顯示該列之前後的內容。

  • -d或--directories= 當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep指令將回報信息並停止動作。

  • -e或--regexp= 指定字符串做爲查找文件內容的範本樣式。

  • -E或--extended-regexp 將範本樣式爲延伸的普通表示法來使用。

  • -f或--file= 指定範本文件,其內容含有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式爲每列一個範本樣式。

  • -F或--fixed-regexp 將範本樣式視爲固定字符串的列表。

  • -G或--basic-regexp 將範本樣式視爲普通的表示法來使用。

  • -h或--no-filename 在顯示符合範本樣式的那一列之前,不標示該列所屬的文件名稱。

  • -H或--with-filename 在顯示符合範本樣式的那一列之前,表示該列所屬的文件名稱。

  • -i或--ignore-case 忽略字符大小寫的差別。

  • -l或--file-with-matches 列出文件內容符合指定的範本樣式的文件名稱。

  • -L或--files-without-match 列出文件內容不符合指定的範本樣式的文件名稱。

  • -n或--line-number 在顯示符合範本樣式的那一列之前,標示出該列的列數編號。

  • -o  --僅顯示匹配到的行

  • -q或--quiet或--silent 不顯示任何信息。

  • -r或--recursive 此參數的效果和指定“-d recurse”參數相同。

  • -s或--no-messages 不顯示錯誤信息。

  • -v或--revert-match 反轉查找。

  • -V或--version 顯示版本信息。

  • -w或--word-regexp 只顯示全字符合的列。

  • -x或--line-regexp 只顯示全列符合的列。

  • -y 此參數的效果和指定“-i”參數相同。

  • --help 在線幫助。


常見字符集:

[:alnum:]    匹配任意字母數字字符0-9、A-Z或a-z

[:alpha:]    匹配任意字母字符,不管是大寫還是小寫

[:blank:]    匹配空格或者製表符

[:digit:]    匹配0-9之間的數字

[:lower:]    匹配小寫字母字符a-z

[:print:]    匹配任意可打印字符

[:punct:]    匹配標點符號

[:space:]    匹配任意空白字符:空格、製表符、NL、FF、VT、和CR

[:upper:]    匹配任意大寫字母字符A-Z


文件名通配:


*任意長度的任意字符
匹配任意單個字符
[ ]匹配指定範圍內的任意單個字符
[^]匹配指定範圍以外的任意單個字符



基本正則表達式:


字符匹配.匹配任意單個字符

[ ]匹配指定範圍內的任意單個字符

[^]匹配指定範圍外的任意單個字符


次數匹配*前面的字符可以出現任意次

\?前面的字符出現0次或者1次

\{m\}前面的字符出現m次

\{m,n\}前面的字符出現n次~m次

\{m,\}前面的字符至少出現m次

\{0,n\}前面的字符至多出現n次




.*任意長度的任意字符



位置錨定^行首錨定,寫在模式的最左側

$行尾錨定,寫在模式的最右側

^$匹配空行

\<

詞首錨定,出現於單詞左側

\>詞尾錨定,出現於單詞右側



分組\1引用第1個括號所匹配到的內容,而非模式本身

\2引用第2個括號所匹配到的內容,而非模式本身

\(\)匹配分組



擴展正則表達式:



字符匹配.匹配任意單個字符

[ ]匹配指定範圍內的任意單個字符

[^]匹配指定範圍外的任意單個字符



次數匹配*前面的字符可以出現任意次

前面的字符出現0次或者1次

+前面的字符至少出現1次

{m}前面的字符出現m次

{m,n}前面的字符出現m次~n次

{m,}前面的字符至少出現m次

{0,n}前面的字符至多出現n次



錨定^行首錨定,寫在模式的最左側

$行尾錨定,寫在模式的最右側

\<,\b詞首錨定,出現於單詞左側

\>,\b詞尾錨定,出現於單詞右側

^$匹配空行


分組( )匹配一個分組

\1引用第1個括號所匹配到的內容,而非模式本身

grep正則表達式元字符

^    錨定行的開始 例如:'^grep' 匹配所有以grep開頭的行。

wKioL1SekTnyZRdXAABfy0dDz0Y605.jpg


$    錨定行的結束 例如:'grep$' 匹配所有以grep結尾的行。

wKioL1Sekhjz12NOAABf7X4PVTA942.jpg


.    匹配一個非換行符的字符 例如:'gr.p' 匹配gr後面接一個任意字符,然後是p。

wKioL1Sek1-TcY0XAABdTHTl5eE410.jpg


*    匹配零個或多個先前字符 例如: '*grep' 匹配所有一個或多個空格後緊跟grep的行,.*一起用,代表任意字符。

wKiom1SelReQNIv_AAClEf8sRJs235.jpg


[]  匹配一個指定範圍內的字符 例如:'[Gg]rep' 匹配Grep和grep.

wKioL1Sel3iTSRT8AAA-1qieyZE214.jpg

[^] 匹配一個不在指定範圍內的字符,例如:'[^A-EG-Z]rep' 匹配不包含A-EG-Z開頭,緊跟rep的行

wKioL1SemP_h3zKzAABKzmKoJeA003.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章