正則表達式和文本處理工具


一、什么是正則表達式

    字符是計算機軟件處理文字時最基本的單位,可能是字母,數字,標點符號,空格,換行符,漢字等等。字符串是0個或更多個字符的序列。文本也就是文字,字符串。說某個字符串匹配某個正則表達式,通常是指這個字符串里有一部分(或幾部分分別)能滿足表達式給出的條件。

   在編寫處理字符串的程序或網頁時,經常會有查找符合某些復雜規則的字符串的需要。正則表達式就是用於描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。

二、正則表達式的三種文本處理工具、命令。

   I.grep

   1.gerp的常用參數

      -n 只顯示行號

  -o 只顯示匹配的內容

  -q 靜默模式,沒有輸出,需要使用$?來判斷有沒有過濾到自己想要的東西

  -l 如果匹配成功,則輸出文件名稱,如果失敗則不輸出,通常會-rl一起連用

  -A 如果匹配成功,會將匹配到的內容和后N行一起輸出

  -B 如果匹配成功,會將匹配到的內容和前N行一起輸出

  -C 如果匹配成功,會將匹配到的內容和前后N行一起輸出

  -c 如果匹配成功,會將匹配內容的行數輸出

  -E grep的擴張,相當於egrep

  -i 忽略大小寫

  -v 取反,不匹配

  -w 匹配單詞

   2.正則介紹

  ^ 行首

  $ 行尾

  . 除了換行符以外的單個字符

  * 前導字符的零個或多個

  .* 所有字符

  [] 字符組內的任一字符

  [^] 對字符組內的每個字符取反(不匹配字符組內的每個字符)

  ^[^] 非字符組內的字符開頭行

  [a-z] 小寫字母

  [A-Z] 大寫字母

  [a-z] 小寫和大寫字母

  [0-9] 數字

  擴展正則 sed 加 -r 參數 或轉義

  grep 加 -E 或 egrep 或轉義

  AWK 直接支持 但不包含{n,m}

  ? 前導字符零個或一個

  + 前導字符一個或多個

  x{m} x出現m次

  x{m,}  x出現m至多次

  x{m,n} x出現m至n次

   II.sed

    流編輯器 stream editer,是以行為單位的處理程序。

    sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作。

    1.命令格式

      sed [-nefri] ‘command’ 輸入文本 

    2.常用選項

     -n∶使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到螢幕上。但如果加上 -n 參數后,則只有經過sed 特殊處理的那一行(或者動作)才            會被列出來。
     -e∶直接在指令列模式上進行 sed 的動作編輯;
     -f∶直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的sed 動作;
     -r∶sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
     -i∶直接修改讀取的檔案內容,而不是由螢幕輸出。

   3.常用命令

     a 新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
     c 取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
     d 刪除,因為是刪除啊,所以 d 后面通常不接任何咚咚;
     i  插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
     p 列印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作~
     s 取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如   1,20s/old/new/g 就是啦

   III.awk

     awk是行處理器,依次對每一行進行處理,然后輸出

    1.命令格式

     awk [options] 'commands' files

    2.常用選項

    -F 定義字段的分割符,默認的分隔符是連續的空格或制符表

    -v 定義變量並賦值 也可以借用次方式從shell變量中引入

    2.特殊要點

     $0 表示整個當前行

  $1 每行第一個字段

  NF 字段數量變量

  NR 每行的記錄號,多文件記錄遞增

  FNR 與NR類似,不過多文件記錄不遞增,每個文件都從1開始

  \t 制表符

  \n 換行符

  FS BEGIN時定義分隔符

  RS 輸入的記錄分隔符,默認為換行符(即文本是按一行一行輸入)

  ~ 匹配,與==相比不是精確比較

  !~ 不匹配,不精確比較

  == 等於,必須全部相等,精確比較 

  != 不等於,精確比較

  && 邏輯與

  + 匹配時表示1個或者1個以上

  /[0-9][0-9]+/ 兩個或兩個以上數字

  /[0-9][0-9]*/ 一個或一個以上數字

  FILENAME 文件名

  OFS 輸出字段分隔符,默認也是空格,可以改為制表符等

  ORS 輸出的記錄分隔符,默認為換行符,既處理結果也是一行一行輸出

  -F '[:#/]' 定義三個分隔符

  print 是awk打印指定內容的主要命令

 

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM