1. 程式人生 > >Linux grep命令的一些使用體會

Linux grep命令的一些使用體會

linux grep 正則表達式

Linux grep 命令

Linux系統中grep,egrep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹 配的行打印出來。grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是所有用戶。

1.grep : 最早的文本匹配程序,使用POSIX定義的基本正則表達式(BRE)來匹配文本。
2.egrep : 擴展式grep,其使用擴展式正規表達式(ERE)來匹配文本。
3.fgrep : 快速grep,這個版本匹配固定字符串而非正則表達式。並且是唯一可以並行匹配多個字符串的版本。

grep語法格式:
grep [option]... ‘PATTERN‘ FILE...

options:
-E : 使用擴展正則表達式進行匹配, grep -E 或取代 egrep 命令。
-F : 使用固定字符串進行匹配, grep -F 或取代傳統的fgrep命令。

-A #:顯示匹配字符串的後面所有行。
-B #:顯示匹配字符串的前面所有行。
-C #:顯示匹配字符串的前面後面的行。
-e : 通常第一個非選項的參數認為是要匹配的模式,也可以同時提供多個模式,只要將其放入單引號,並用換行字符分隔他們。
  模式以減號開頭時,為防止混淆其為選項,-e選項說明其後的參數為模式,即使他以減號開頭。
-f : 從pat-file文件讀取模式作為匹配。
-i : 模式匹配時忽略大小寫差異。
-l : 列出匹配模式的文件名稱,而不是打印匹配的行。

-q : 靜默的,如果匹配成功,不將匹配的行輸出到標準輸出;否則即是不成功。
-s : 不顯示錯誤信息,通常與-q並用。
-v : 取反。
-o: 僅顯示匹配的字串,而非字串所在的行。
--color=auto: 匹配的字符出現顏色。
-n:顯示匹配行及行號。
-c 只輸出匹配行的計數。
說明:可以同時查找多個文件中的內容,當指定多個文件時,每個顯示出的文件行前會有文件名加一個冒號標識其來自哪個文件。
可以使用多個-e 或 -f 選項,建立要查找的模式列表。

正則表達式:
是一類字符所書寫的模式,其中許多字符不表示其字面意義,而是表達控制或通配等功能;

元字符:
不表示其字面意義,而用於額外功能性描述

正則表達式:

正則表達式引擎

基本正則表達式:沒有特殊意義的字符 grep
擴展正則表達式: 元字符,有在正則表達式中有特殊意義 egrep,grep -E
fgrep: fast, 不支持使用正則表達式

字符匹配:
.: 匹配任意單個字符
[]: 匹配指定範圍內的任意單個字符
[0-9], [[:digit:]] : 數字字符
[a-z], [[:lower:]] :小寫字母字符
[A-Z], [[:upper:]] :大寫字母字符
[[:space:]] :空格字符
[[:punct:]] :標點符號字符
[[:alpha:]] :字母字符
[[:alnum:]] :數字字符

次數匹配元字符:用於實現指定其前面的字符所能夠出現的次數
*: 任意長度,它前面的字符可以出現任意次
例如:a*b
aab, abb, b,
\?: 0次或1次,它前面的字符是可有可無的
例如:a\?b
ab, b, cb
{m}: m次,它前的字符要出現m次
例如:a{2}b
ab, aab, b, aaaab, abb
{m,n}: 至少m次,至多n次
例如:a{2,5}b
ab, b, aab
{m,}:至少m次
{0,n}: 至多n次

位置錨定:
^ : 行首錨定;匹配緊接著的正則表達式,BRE中僅在正則表達式的開頭有特殊的含義,ERE中在任何位置都有特殊含義
寫在模式最左側

$: 行尾錨定:匹配前面的正則表達式,在字符串或者行結尾處。BRE中僅在正則表達式的結尾處有特殊的含義,ERE中在任何位置都有特殊含義
    寫在模式最右側

^$:  匹配空白行
\   :  通常用於打開或關閉後續字符的特殊含義,如\(...\)與\{...\}
[]  : 匹配方括號內的任一字符,其中可用連字符(-)指的連續字符的範圍;^符號苦出現在方括號的第一個位置,則表示匹配不在列表中的任一字符,

不包含特殊字符的連續字符組成的串叫單詞:
\<: 詞首,出現於單詞左側,\b
\<char
\>: 詞尾,出現於單詞右側, \b
char\>

擴展正則表達式:
字符匹配:
.
[]
[^]
次數匹配:
:任意次
?: 0次或1次
+: 至少1次
{m}: 精確匹配m次
{n,m}: {n}指重現n次;{n,m}指重現n至m次
{m,}:至少m次
{0,n}:至多n次
錨定:
^
$
\<, \b
\>, \b
^$, ^[[:space:]]
$
分組:
()
引用:\1, \2, \3

或者:
a|b: a或者b
con(C|c)at
concat或conCat?
conC或cat

grep -E ‘PATTERN‘ FILE...
egrep ‘PATTERN‘ FILE...

常用Linux/Unix工具中的表示法

PCRE記法 vi/vim grep awk sed
* * * * *

註:PCRE中常用\b來表示“單詞的起始或結束位置”,但Linux/Unix的工具中,通常用\<來匹配“單詞的起始位置”,用\>來匹配“單詞的結束位置”,sed中的\y可以同時匹配這兩個位置。

Linux grep命令的一些使用體會