天天看點

正規表達式的整理grep,sed,awk

首先,什麼是正規表達式。

 簡單的說,正規表達式就是處理字元串的方法,它是以行為機關來進行字元串的處理行為,正規表達式通過一些特殊符号的輔助,可以讓使用者輕易達到查找、删除、替換某特定字元串的處理程式

正規表達式 REGEXP:REGular EXPression

 basic REGEXP:基本

 Extended REGEXP:擴充

grep的用法:

  功能:進行字元串資料的對比,然後将符合使用者需求的字元串列印出來,以整行為機關來進行選取的,選取的結果丢棄不符号标準的行

#grep

   -i :忽略大小寫

   --color

   -v :顯示沒有被模式比對到的行

   -o :隻顯示被模式比對的字元串

    -E:使用擴充正規表達式

 -A #:(#為數字)附帶顯示後2行

 -B #:(#為數字)附帶顯示前2行

 -C #:(#為數字)附帶顯示前後2行

 *:任意長度的任意字元

 ?:任意單個字元

 []:以内

 [^]:以外

 正規表達式:REGular EXPression ,REGEXP

 元字元:

 . :任意單個字元

 []:比對指定範圍内的任意單個字元

 [^]:比對指定範圍外的任意單個字元

        字元集合

 [:digit:]:代表數字,既0-9

 [:alnum:]:代表代表英文大小寫字元及數字,即a-z,A-Z,0-9

 [:blank:]:代表空格和[tab]鍵

 [:alpha:]:代表代表英文大小寫字元a-z,A-Z

 [:cntrl:]:代表鍵盤上的控制按鍵,

 [:graph:]:除了空格符(空格和[tab]鍵)以外的所有

 [:lower:]:小寫字元即a-z

 [:print:]:代表任何可以列印出來的字元

 [:punct:]:代表标點符号

 [:upper:]:代表大寫字元即A-Z

 [:space:]:代表可以産生空白的字元

 [:xdigit:]:代表16進制的數字類型,包括0-9,A-F,a-f

---------------------------------基礎正規表達式字元

 比對次數(貪婪模式):

 *  :比對其前面的字元任意次 

 .* :任意長度的任意字元

 \  :轉義字元,将有特殊意義的字元特殊意義除去

 \?:比對其前面的字元1次或0次

 \{m,n\}:比對其前面的字元至少m次,至多n次

 位置錨定:

 ^ :錨定行首,此字元後邊的任意内容必須出現在行首

 $:錨定行尾,此字元前邊的任意内容必須出現在行尾

 ^$:空白行

 \<或\b :錨定詞首,其後面的任意字元必須作為單詞的首部出現

 \>或\b :錨定詞尾,其前邊的任意字元必須作為單詞的尾部出現

 分組:

 \(\) 

    \(ab\)*  ab可以出現0次或任意次

     後向引用

      \1:引用第一個左括号以及與之對應的右括号所包括的所有内容

      \2:

      \3:

sed用法:可将資料進行選取,删除,替換,新增等功能。

 sed:Stream EDitor

 行編輯器(全屏編輯器:vi)

sed [] 'AddressCommand' file ...

 -n:靜默模式,不在預設顯示模式空間中的内容

 -i:直接修改原檔案

 -e SCRIPT -e SCRIPT:可以同時執行多個腳本

 -f /PATH/TO/SED_SCRIPT

  sed -f /path/to/scripts file

 -r:表示使用擴充正規表達式

Address:

1、StartLine , EndLine

  比如1,100

  $:最後一行

2、/RegExp/

 /^root/

3、/pattern1/,/pattern2/

 第一次被pattern1比對到的行開始,至第一次被pattern2比對到的行結束,這中間的所有行

4、LineNumber

 指定的行

5、StartLine,+N

 從startline開始,向後的N行;

Command

 d:删除符合條件的行;

 p:顯示符合條件的行;

 a \string:在指定的行後面追加新行,内容為string

  \n:可以使用者換行

 i \string:在指定的行前面添加新行,内容為string

 r FILE:将指定的檔案的内容添加至符合條件的行處

 w FILE:将位址指定範圍内的内容另至指定的檔案夾中;

 s/pattern/string/修飾符:查找并替換,預設隻替換每行中第一次被模式比對到的字元串

  加修飾符

  g:全局替換

  i:忽略字元大小寫

 s///:s###  s@@@

  \(\),\1,\2

 &:引用模式比對整個串

---------------------擴充正規表達式

 + :重複1個或多個前一個字元

 ?:0個或1個前一個字元

 | :用或(or)的方式找出數個字元串

 ():分組

 ()+:同上

#printf 格式化列印

 \a  警告聲音輸出

 \b  倒退鍵

 \f  清除螢幕

 \n  輸出新的一行

 \r  即Enter按鍵

 \t  水準的tab鍵

 \v  垂直的tab鍵

 \xNN  NN為兩位數字,可以轉換數字成為字元

 %ns  那個n是數字,s代表string ,即多少個字元,

 %ni  那個n是數字,i代表integer ,即多少個整體數字,

 %N.nf 那個n與N都是數字,f代表floating,如果有10位數,但小數點有2位,則%10.2f

#awk:

 以行為處理機關,以字段為最小的處理機關。

 awk的處理流程

  1.讀入第一行,并将第一行的資料填入$0,$1,$2等變量中

  2.一如條件類型的限制,判斷是否需要進行後面的操作;

  3.做完所有的動作與條件類型;

  4.若還有後續的“行”的資料,則重複上邊1~3的步驟,直到所有的資料都讀完為止。

  變量名稱

   NF:每一行($0)用于的字段總數

   NR:目前awk所處理的是“第幾行”資料

   FS:目前的分隔字元,預設是空格鍵 

  注意:awk後續的所有動作都是以單引号''擴住的

    awk'{pattern + action}' {filename}

    pattern表示awk在資料中查找的内容,支援正規表達式

    action 是在找到比對内容的時候執行的一系列指令

    {}不需要在指令中始終出現,他們需要在特定模式對一系列指令進行分組

 awk的運算邏輯符

  >

  <

  >=

  <=

  ==

  !=

#dill cmp

 #dill :以行為機關來進行比較,

 #cmp  :以字元為機關來進行比較

本文轉自 陳延宗 51CTO部落格,原文連結:http://blog.51cto.com/407711169/1148239,如需轉載請自行聯系原作者