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#: 後面直接加數字.來顯示搜索到結果行的下#行