之前的句子
煙鎖池塘柳 炮鎮海城樓
因荷而得藕 有杏不需梅
認識于小林寒風的一篇小說《鳳山遺夢》
grep
grep是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行。模式:由正則表達式字符及文本字符所編寫的過濾條件
用法:
grep [OPTIONS] PATTERN [FILE…]
簡單示例:
grep命令選項
–color=auto :對匹配到的文本著色顯示,(CentOS7中“別名”alias中已設置)
-v :顯示不被pattern匹配到的行,反向匹配行。
-i :忽略字符大小寫
-n :顯示匹配的行號
-c :統計匹配的行數
-o :僅顯示匹配到的字符串
-H, –with-filename當搜索多個文件時,顯示匹配文件名前綴
-h–no-filename當搜索多個文件時,不顯示匹配文件名前綴
-q :靜默模式,不輸出任何信息(注重執行過程,不注重執行的結果)
-e :實現多個選項間的邏輯or關系
示例:grep –e root –e magedu /etc/passwd
-w :匹配整個字符串
-E :使用ERE,擴展正則表達式egrep
-F :相當于fgrep,一個換行符分隔的字符串的集合fgrep,不支持正則表達式。
-A# :after,打印匹配本身以及后#行行
-B# :before, 打印匹配本身以及前#行行
-C# :context, 打印匹配本身以及前后各#行行
正則表達式
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。簡單來說,正則表達式是通過一些特殊字符的排列,用以查找、替換、刪除一行或多行文字字符串
正則表達式可分為兩類:基本正則表達式:BRE,擴展正則表達式:ERE
按元字符分類:字符匹配、匹配次數、位置錨定、分組,根據元字符分類我們一一介紹兩類正則表達式。
基本正則表達式BRE
用法:grep [OPTIONS] PATTERN [FILE…]
元字符分類:
(1)字符匹配:
. :匹配任意單個字符
[] :匹配指定范圍內的任意單個字符
[^] :匹配指定范圍外的任意單個字符
[:alnum:] :字母和數字
[:alpha:] :代表任何英文大小寫字符,亦即A-Z,a-z
[:lower:] :小寫字母[:upper:]大寫字母
[:blank:] :空白字符(空格和制表符)
[:space:] :水平和垂直的空白字符(比[:blank:]包含的范圍廣),任何產生空白的字符。
[:cntrl:] :不可打印的控制字符(退格、刪除、警鈴…))
[:digit:] :十進制數字
[:xdigit:] :十六進制數字
[:graph:] :可打印的非空白字符
[:print:] :可打印字符
[:punct:] :標點符號
(2)匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數
* :匹配前面的字符任意次,包括零次無限次
.* :任意長度的任意字符
\? :匹配其前面的字符0或1次
\+ :匹配其前面的字符至少1次
\{n\} :匹配前面的字符n次
\{m,n\} :匹配前面的字符至少m次,至多n次
\{,n\} :匹配前面的字符至多n次
\{n,\} :匹配前面的字符至少n次
(3)位置錨定:定位出現的位置
^ :行首錨定,用于模式的最左側
$ :行尾錨定,用于模式的最右側
^PATTERN$ :用于模式匹配整行
^$ :空行
^[[:space:]]*$ :空白行
\<或或\b詞首錨定,用于單詞模式的左側
\>或或\b詞尾錨定;用于單詞模式的右側
\<PATTERN\>匹配整個單詞
(4)分組:
\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,例如:\(root\)\+
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1,\2,\3,…其中涉及后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身\1表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符(具體用法可查看擴展正則表達式中的舉例)
\|:邏輯關系or 或
示例:顯示/proc/meminfo文件中以大小s開頭的行
擴展的正則表達式ERE
用法:egrep [OPTIONS] PATTERN [FILE…] 其中:egrep等價于grep –E
元字符分類:
(1)字符匹配:
. :任意單個字符
[] :指定范圍的字符
[^] :不在指定范圍的字符
(2)次數匹配:
* :匹配前面字符任意次
? :0或1次
+ :1次或多次
{m} :匹配m次
{m,n} :至少m,至多n次
(3)位置錨定:
^ :行首
$ :行尾
\<,\b :語首
\>,\b :語尾
(4)分組:
():將一個或多個字符捆綁在一起,當作一個整體進行處理,例如:\(root\)\+分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1,\2,\3,…,其中涉及后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身\1表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
示例:后向引用,
顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行。
cat /etc/grub2.cfg | grep “^\([[:blank:]]\)\{1,\}[^\1]”
|:邏輯關系 或 or (相似基本正則表達式)
簡單對比一下就會發現,基本正則表達式和擴展正則表達式的區別就在于拓展正則表達中好多符號可以不用加“\”轉義字符,除了后向引用“\1、\2…”和位置錨定“\b、\>…”
文本處理工具系列圓滿結束,以后發現需要補充的會及時更新,最后的往往是最重要的,此次總結可能存在疏漏,請各位大佬批評指正。
文本處理工具系列<1>http://www.www58058.com/82973 <2>http://www.www58058.com/83083
原創文章,作者:Mozart,如若轉載,請注明出處:http://www.www58058.com/83512