grep命令詳解

grep是文本搜索工具的命令, 它是逐行搜索,並且以整行爲結果顯示.

grep命令格式

grep [OPTIONS] PATTERN [FILE...]


PATTERN主要是元字符和字符串組成的

元字符

. : 匹配任意單字符,包括空格和globing中的?相同

[]: 方括號內可以放指定字符的範圍, 常用格式有[[:digit:]]數字, [[:lower:]]小寫字母, [[:uppper:]]大寫字母, [[:alpha:]]大小寫字母, [[:alnum:]]字母和數字, [[:space:]]空格和回車, [[:punct:]]標點符號

[^]: 中括號內內容取反, 例如[^1-5] 取1到5外所有的字符

次數匹配字符

*: 前面字符可以出現任意次包括0次

\?: 前面字符出現0或1此

\+:前面字符出現一次或一次以上

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

\{n,m\}: 前面字符出現n到m次

\(0,m\): 前面字符最多出現m次

所以.*表示任意長度字符,包括空

位置錨定符

^:行首錨定

$: 行尾錨定

例: ^[[:space:]]*$表示空行

只包含字母並且首尾兩端有空格的字符串就單詞,

\<: 錨定詞首

\>: 錨定詞尾

例: \<[[:alpha:]]*\>表示一個單詞

分組

\(\): 將字符串用小括號包起來,後面加次數匹配字符

例: \(abc\)* 表示abc可出現無數次

分組引用

\#:引用前面分好的組,並且前面可以有多個組, #表示第幾個組, 組是由左到右的小括號編號的

文本內容
this is aweful
adabcfdabc
[root@centos ~]# grep "\([[:alpha:]]*\(abc\)[[:alpha:]]*\)\2" b
adabcfdabc

注意: 正則表達式的貪婪匹配和非貪婪匹配

例如有個字符串abcderwd, pattern爲abc.*d, 結果會爲abcderwd而不是abcd, 說明他會儘可能多的匹配, 也就是貪婪模式, 反之則爲非貪婪模式.


擴展正則表達式

用法: 

egrep [OPTIONS] PATTERN [FILE...]  或者grep -E


主要說下它和一般正則表達式的相同點和區別

1. 字符匹配一樣

2. 次數匹配只有*一樣其他都可以省略轉義字符\,  例如: ?, + {m,n}

3. 錨定都省略了轉義字符\, 只有單詞錨定一樣\<\>

4. 分組無需\(\),直接用括號()

5.分組引用一樣\#

6. 加了或的關係

[root@centos ~]# grep -E --color=auto  "good|bad" b
today is a good day
this is goodis not enough
this is bad

注意兩邊要全包括, 但如果只要部分, 需要用括號括起來

[root@centos ~]# grep -E --color=auto  " (good|bad) " b
today is a good day


grep中一些常用參數選項

-v:取反

取除了good的說有行

[root@centos ~]# grep -v --color=auto  "good" b
abcd
this is bad
this is ok
thi si aweful 
adabcfdabc

-o: 僅顯示匹配的字符串本身,而非整行

[root@centos ~]# grep -o --color=auto  "good" b
good
good

-i: 忽略查詢字符串的大小寫

[root@centos ~]# grep -i --color=auto  "GooD" b
today is a good day
this is goodis not enough

-E: 支持擴展正則表達式和egrep一樣

-A#: 後面直接加數字.來顯示搜索到結果行的上下#行

[root@centos ~]# cat b
today is a good day
abcd
this is goodis not enough
this is bad
this is ok
thi si aweful 
adabcfdabc
[root@centos ~]# grep -A1 --color=auto  "good" b
today is a good day
abcd
this is goodis not enough
this is bad

-B#: 後面直接加數字.來顯示搜索到結果行的上#行

-C#: 後面直接加數字.來顯示搜索到結果行的下#行



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