一、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開頭的行。
$ 錨定行的結束 例如:'grep$' 匹配所有以grep結尾的行。
. 匹配一個非換行符的字符 例如:'gr.p' 匹配gr後面接一個任意字符,然後是p。
* 匹配零個或多個先前字符 例如: '*grep' 匹配所有一個或多個空格後緊跟grep的行,.*一起用,代表任意字符。
[] 匹配一個指定範圍內的字符 例如:'[Gg]rep' 匹配Grep和grep.
[^] 匹配一個不在指定範圍內的字符,例如:'[^A-EG-Z]rep' 匹配不包含A-EG-Z開頭,緊跟rep的行