正則表達式和grep的介紹及使用

                         

        在linux上用來處理文本信息最好的工具莫過於使用grep,sed和awk這三種工具了。可是如今咱們來介紹正則表達式和grep命令,及用法。
linux

grep, egrep, fgrep:文本過濾工具(模式:pattern)工具; 
grep:基本正則表達式,-E,-F 
egrep:擴展正則表達式, -G,-F 
fgrep:不支持正則表達式, 
git


Regular Expression ,REGEXP 正則表達式

        正則表達式用來在文件中匹配符合條件的字符串,正則是貪婪匹配(凡有的一行都列出)。grep,awk,sed等命令能夠支持正則表達式。通配符用來在系統中匹配符合條件的文件名,通配符是徹底匹配(只列有的)。ls find cp命令不支持正則表達式。 
\ 轉義符,後面的字符被grep使用。表明取消特殊符號的含義取消。(使符號的圖書含義取消,後面的符號變爲純字符)。正則表達式

基本正則BRE

字符匹配

.  匹配除換行外的任意一個字符.
[]中括號中的一個字符.  []匹配括號中任意一個字符. 例如[abcd][12345],任意[a-d][1-4]中的任意. 
[^] 括號內除外.
字符集:[:digit:]數字、[:lower:]小寫、[:upper:]大寫、[:alpha:]字母、[:alnum:]字母數字、[:punct:]標點、[:space:]空格 [][xdigit]16進制

示例:express

wKiom1bi0H7QQEFJAABKYDfIV3E217.jpg

wKioL1bi0Qmykue6AAA8YYPyeV8129.jpg

wKiom1bi0I_wAesoAABBPvRZuAc170.jpg

wKioL1bi0RySjciMAAAu6sjV2Ss801.jpg

wKiom1bi0JvR-B06AAA9Ep7ueqc027.jpg


次數匹配:

用於要指定其出現的次數的字符後面,用來限制前面的字符要出現的次數。默認工做在貪婪模式下。 
正則也會統計空格數,可是一個tab和一個space都被認爲一個空格。ide

*       前一個字符匹配0次或任意次;  .*表任意長度的任意字符;
\?     任意字符重複1次,或0次, 即其前面的字符是無關緊要的;
\+:    匹配其前面的字符1次或屢次,即其前面的字符要出現至少1次。由於+有特殊意思,因此要轉義;
\{0,m\} 前面的字符至多m次;
\{n,m\} 前面的字符至少出現n次,最多出現m次;例如[a-z]\{6,8\}匹配6-8位的小寫字母;
\{n\}   表明前面的字符剛好出現幾回.例如[0-9]\{4\}匹配四位數字,[1][3-8][0-9]\{9\}匹配手機號碼;
\{n,\}  前面的數字出現很多於n次.[0-9]\{2,\}表示兩位以上的數字;

示例:工具

wKiom1bi1PvjNqF6AABJAyFDbOc117.jpg

wKioL1bi1YWjUEKXAAAyqS8Bg3c902.jpg

wKiom1bi1QXjXU1fAAAx01PIJlM248.jpg

wKioL1bi1hXC_60vAABmxg-ZA78416.jpg

wKioL1bi1lSRKTqBAAA2O_5MmkM382.jpg

wKiom1bi1hqDUxWgAAAxFF-OLSI538.jpg

wKiom1bi1jvzsUviAABKgHWO704054.jpg




錨定位置:

標定出現的位置ui

^匹配行首.
例如:   ^hello   任意一hello開頭的行;
$匹配行尾.
例如:   hello$  任意一hello結尾的行;
^PATTERN$  用於PATTERN來匹配整行;    
 例如: ^$  匹配空白行;
 例如: ^[[:space:]]*$  空行或包含空白字符的行;

組成的連續字符(字符串)都稱爲單詞;spa

\< 或 \b   後面的字符必須作爲單詞首部出現,\<PATTERN,\bPATTERN;
\> 或 \b   後面出現的任意字符必須以單詞的尾部出現.PATTERN\>,PATTERN\b;
\<root\>   \broot\b 以root做爲整個單詞出現的,獨立出現。

示例:code

wKioL1bi18LitZ3UAAA4EIKxeH8694.jpg

wKiom1bi10HwC1xIAAAwZWoxcUU707.jpg

wKioL1bi18nRZwiyAAAs0Uy6ETc707.jpg

wKiom1bi10bxW6dLAAAz9O38huI462.jpg




內容分組及引用:

前面匹配到的後面也原封不動的匹配。至關於匹配兩個如出一轍的。也叫後向引用。 
後向引用:引用前面的分組括號中的模式所匹配到的字符;regexp

\(PATTERN\) 將一個或多個字符捆綁在一塊兒,看成一個總體進行處理; 
\(ab\)*  ab出現零次或任意次
Note:分組括號中的模式匹配 到的內容會被正則表達式引擎自動記錄於內部的變量中,這些變量爲:
    \1:模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
    \2:模式從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
    \n:模式中第n個左括號以及與之匹配的右括號之間的模式所匹配的字符串;
    ...

grep "\(l..e\).*\1" lovers.txt 出現l..e,中間任意填充,後面又出現l..e且先後的l..e相同。

例如:

wKioL1bi2Hbz2p-rAAA1dVJZKus676.jpg


擴展正則表達式:egrep ERE

grep -E 或 egrep [OPTIONS] PATTERN [FILE…] 
擴展正則表達式的元字符:

字符匹配:

.  任意單個字符
[]  指定範圍內的任意單個字符
[^]  指定範圍外的任意單個字符


次數匹配:

*        *前面的字符任意次,0,1或屢次;
?        ?前面的字符0次或1次,其前的字符是無關緊要的;
+        +前面的字符其前字符至少1次;
{m}      {m}其前的字符m次;
{m,n}    {m,n}前面的字符至少m次,至多n次; 
{0,n}    {0,n}前面的字符至多出現n次,至少0次。
{m,}      {m,}前面的字符前面的字符至少出現m次。

位置錨定

^:行首錨定;
$:行尾錨定;
\<, \b:詞首錨定;
\>, \b:詞尾錨定;

分組及引用:

   (PATTERN):分組;括號內的模式匹配到的字符會被記錄於正則表達式引擎的內部變量中;

提供後向引用:\1, \2, ...

或者:

a|b:a或者b;
C|cat:C或cat,整個左側或右側
(c|C)at:cat或Cat
a|bc:匹配a或bc ,或者指整個左邊或右邊

例如:

wKiom1bi2d-zIdwpAABCWSbP9IU015.jpg

wKioL1bi2mqhTk1nAABASVinfB0383.jpg

fgrep–fast grep

不支持正則表達式,不須要正則時效果好。 


grep: Global search REgular expression and Print out the line.

做用:文本搜索工具,根據用戶指定的「模式(過濾條件)」對目標文本逐行進行匹配檢查;打印匹配到的行,默認支持的是基本正則表達式; 
模式:由正則表達式的元字符及文本字符所編寫出的過濾條件,須要加引號;

下面是grep的一些經常使用選項。

grep [options] PATTERN [FILE...] 
grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]
    --color   把搜到的關鍵字顏色表示;
    --color==auto  搜索出的關鍵字用顏色表示高亮顯示;    
    -i  ignorecase 忽略大小寫;
    -v,--invart-match  顯示沒有被模式匹配的行;
    -o 只顯示模式匹配的字符串自己;
    -q ,--quiet,--silent:靜默模式,即不輸出任何信息;
    -d   可查目錄下的文件名,默認查的是文本;
    -n 輸出行號;   
    -E , --extended-regexp  支持使用擴展正則表達式元字符(grep使用基本正則表達式 ); 
    -F    不使用正則表達式。  
    -G   使用基本正則。   
    -P --perl-regexp  支持pcre ,perl的正則。
    -e 多模式機制;  
    -f FILE,--filefile:每行包含了一個pattern的文本文件,即gerp script;
    -A #   當grub匹配到,顯示後#行   
    -B #    同上顯示前面的#行  
     -C #    顯示先後#行

完!

相關文章
相關標籤/搜索