1.grep,egrep的簡介
grep:( global search regular expression (RE)) and print out the line。全面搜索正則表達式並把行打印出來是一種強大的文本搜索工具grep是一款功能強大的文本
搜索工具,根據用戶指定的文本模式對目標文件進行逐行搜索,顯示能夠被模式匹配的行。
egrep:egrep的命令只和grep有很小不同,使用擴展的正則表達式構建模式,egrep是grep的擴展相當於grep -E,可以支持更多的RE元字符
注意:
正則表達式(RE):是一類字符書寫出來的模式(Patern)
元字符:不表示字符本身的意義,在正則表達式中用於額外功能的描述。
模式(Pattern):文本字符和正則表達式的元字符組合而成匹配條件
2.grep的工作方式
grep在一個或多個文件中搜索用戶指定的模式。如果模式包括空格,則必須被引用,模式後的所有字符串被看作文件名。搜索的結果被送到屏幕,不影響原文件內容。
grep的使用格式:
grep [OPTIONS] PATTERN [FILE...]
模式可以用單引號和雙引號,如果模式中要做變量替換時則必須用雙引號
grep常用選項:
--colour(color):匹配到的字符串以顏色顯示
用法如下圖所示
-v :反向查找,即顯示沒有'搜索字符串'內容的那行
用法 如下圖所示
-i :忽略大小寫
用法 如下圖所示
-o :只顯示被模式匹配的字符串
用法如下圖所示
-n :輸出行號
用法 如下圖所示
-A #:支持匹配到的字符串所匹配的行以及下#行(#:表示數字)
用法 如下圖所示
-B #:顯示匹配到字符那行的前面#行
用法如下圖所示
-C #:顯示匹配到字符那行的前後#行
用法 如下圖所示
-E:支持擴展的正則表達,後面有詳細介紹
3.基礎正則表達式元字符以及元字符使用
字符匹配:
.:任意單個字符
[]:指定範圍內的任意單個字符
[0-9],[[:digit:]]
[a-z],[[:lower:]]
[A-Z],[[:upper:]]
[[:alpha:]]
[[:alnum:]]
[[:space:]]
[[:punct:]]
[^]:指定範圍外的任意單個字符
舉例如下
次數匹配:用來指定匹配其前面的字符的次數
*:任意次
.*:匹配任意長度的任意字符
\?:0次或1次
舉例如下
貪婪模式:儘可能的長的去匹配字符;
\{m\}:匹配m次
\{m,n\}:最少m次,最多n次
\{m,\}:至少m次;
\{0,n\}:至多n次;
舉例如下
位置錨定:用於指定字符出現的位置
^:錨定行首
^Char
$:錨定行尾
char$
^$:空白行
\<char:錨定詞首,\bchar
char\>:錨定詞尾,char\b
舉例如下
分組
\(\)
引用:
\1:後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內容
\2:後向引用,引用前面的二個左括號以及與之對應的右括號中的模式所匹配到的內容
...
舉例如下
綜合實例:已添加用戶bash和testbash、basher,找出當前系統上其用戶名和默認shell相同的用戶。
舉例如下
在擴展的正則表達中把\(\) 寫成()、\{ \} 寫成{ },另外加入了+(次數匹配),匹配其前面的字符至少出現一次,無上限、,其餘的都一樣,基本正則表達式,使用|( ){ } . ?
都需要轉義,在擴展正則表達中不需要加\。
grep: 使用擴展正則表達來構建模式,相當於grep -E
元字符:
字符匹配:
.:任意單個字符
[]:指定範圍內的任意單個字符
[^]:指定範圍外的任意單個字符
次數匹配:
*:匹配其前面的字符任意次;
?:匹配其前面的字符0或1次;
+:匹配其前面的字符至少1次
例子如下
舉例如下
{m}:匹配其前面的字符m次;
{m,n}:至少m次,至多n次
{m,}:至少m次;
{0,n}:至多n次;
錨定:
^:行首
$:行尾
\<,\b: 詞首
\>,\b:詞尾
分組:
():分組
|:或者,
舉例如下