linux下練習Regex__c#

來源:互聯網
上載者:User
1.什麼是Regex 在做文文書處理或編寫程式時,用到 尋找、替換等功能, 使用Regex能夠簡單快捷的完成目標。簡單而言,Regex通過一些特殊符號的協助,使使用者可以輕鬆快捷的完成尋找、刪除、替換等處理常式。例如 grep, expr, sed , awk. 或 Vi 中經常會使用到Regex,為了充分發揮 shell 編程的威力,需要精通Regex。正規標記法基本上是一種『標記法』, 只要工具程式支援這種標記法,那麼該工具程式就可以用來作為正規標記法的字串處理之用。 也就是說,例如 vi, grep, awk ,sed 等等工具,因為她們有支援正規標記法, 所以,這些工具就可以使用正規標記法的特殊字元來進行字串的處理。

首先是Regex的特殊符號:
[:alnum:]代表英文大小寫字母及數字 [:alpha:]代表英文大小寫字母[:blank:]代表空格和 tab 鍵[:cntrl:]鍵盤上的控制按鍵,如 CR,LF,TAB,DEL[:digit:]代表數字[:graph:]代表空白字元以外的其他[:lower:]小寫字母[:print:]可以被列印出來的任何字元[:punct:]代表標點符號[:upper:]代表大寫字元[:space:]任何會產生空白的字元如空格,tab,CR 等[:xdigit:]代表 16 進位的數字類型

執行個體:找出檔案中的所有大寫字母
$ grep -n '[[:lower:]]' regular_express.txt


2.語系對Regex的影響 ANG=C 時: 0 1 2 3 4....ABCDE...Zabcde...z LANG=zh_CN 時:0 1 2 3 4...aAbBcCdD.....zZ

在使用Regex[A-Z]時, LANG=C 的情況下,找到的僅僅是大寫字元 ABCD..Z。而在 LANG=zh_CN 情況下,會選取到 AbBcCdD.....zZ 字元。因此在使用Regex時要特別留意語系。

由於我們一般使用的相容與 POSIX 的標準,因此使用 C 語系。
3.grep命令與Regex 1.搜尋特定字串“the”: 參數說明:
-a :將 binary 檔案以 text 檔案的方式搜尋資料
-c :計算找到 '搜尋字串' 的次數
-i :忽略大小寫不同,所以大小寫視為相同
-n :順便輸出行號
-v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行。

$ grep -n 'the' regular_express.txt$ grep -in 'the' regular_express.txt


2.字串匹配
[]中包含的任意一個字元。只能是一個。
字元“ - ”來表示一個範圍
[^...] 排除型字元組。排除後面的字元
[abc]           :表示“a”或“b”或“c”[0-9]           :表示 0~9 中任意一個數字,等價於[0123456789][\u4e00-\u9fa5] :表示任意一個漢字[^a1<]          :表示除“a”、“1”、“<”外的其它任意一個字元[^a-z]          :表示除小寫字母外的任意一個字元


尋找“tast”或者“test”兩個字串。# grep -n 't[ae]st' regular_express.txt 尋找不包含“#”的字串# grep -n '[^#]' regular_express.txt
$ grep -n 'oog' regular_express.txt$ grep -n '[^g]oog' regular_express.txt $ grep -n '[^go]oog'regular_express.txt

行首符號:^
$ grep -n '^the' regular_express.txt
尋找行首為大寫字母的所有行:
# grep -n '^[A-Z]' regular_express.txt

行尾符號:$ 尋找以 d 字母結尾的行:
# grep -n 'd$' regular_express.txt

尋找空行:
$ grep -n '^$' regular_express.txt


查看/etc/insserv.conf 文檔
'^$' : 過濾掉空白行
'^#' :過濾掉注釋行(以#號開頭)
$ cat -n /etc/insserv.conf$ grep -v '^$' /etc/insserv.conf | grep -v '^#'


3.任意一個字元:.  重複字元:*
尋找 a。ou。類型的字元。
$ grep -n 'a.ou.' regular_express.txt
*(星號):代表重複前面 0 個或者多個字元。e*: 表示具有Null 字元或者一個以上 e 字元。ee*,表示前面的第一個 e 字元必須存在。第二個 e 則可以是 0 個或者多個 e 字元。eee*,表示前面兩個 e 字元必須存在。第三個 e 則可以是 0 個或者多個 e 字元。ee*e :表示前面的第一個與第三個 e 字元必須存在。第二個 e 則可以是 0 個或者多個 e 字元。



4.限定連續字元的範圍{}
{ }可限制一個範圍區間內的重複字元數。舉個例子,若要找出 2~5 個 o 的連續字串,如何做。 此時便要用到{}了。由於 { 與 } 在 shell 中有特殊意義,需要用到逸出字元\。

尋找連續的兩個 o 字元:

$ grep -n 'o\{2\}' regular_express.txt
總結:^word    表示帶搜尋的字串(word)在行首word$    表示帶搜尋的字串(word)在行尾.(小數點) 表示 1 個任一字元\        表示逸出字元,在特殊字元前加\會將特殊字元意義去除*        表示重複 0 到無窮多個前一個 RE(Regex)字元[list]   表示搜尋含有 l,i,s,t 任一字元的字串[n1-n2]  表示搜尋指定的字串範圍,例如[0-9] [a-z] [A-Z]等[^list]  表示反向字串的範圍,例如[^0-9]表示非數字字元,[^A-Z]表示非大寫字元範圍\{n,m\}  表示找出 n 到 m 個前一個 RE 字元\{n,\}   表示 n 個以上的前一個 RE 字元



4.Regex運用之sed工具命令 通過Regex和 sed 工具簡單快捷的完成檔案查詢、修改等功能。

sed工具介紹: sed 是非互動編輯器。它不會修改檔案,除非使用 shell 重新導向來儲存結果。預設情況下,所有的輸出行都被列印到螢幕上。

sed 編輯器逐行處理檔案(或輸入),並將結果發送到螢幕。具體過程如下:首先 sed 把當前正在處理的行儲存在一個臨時緩衝區中(也稱為模式空間),然後處理臨時緩衝區中的行,完成後把該行發送到螢幕上。sed 每處理完一行就將其從臨時緩衝區刪除,然後將下一行讀入,進行處理和顯示。處理完輸入檔案的最後一行後,sed 便結束運行。sed 把每一行都存在臨時緩衝區中,對這個副本進行編輯,所以不會修改原檔案。

如果要修改原檔案,可使用-i 選項。 1.將 regular_express.txt 的內容列出並列印行號,同時,將 2-5 行刪除顯示:

$ nl regular_express.txt | sed '2,5d'

注: sed 是 sed -e 的簡寫, 後接單引號
2.刪除第三行到最後一行, $定位到最後一行
刪除第三行到最後一行, $定位到最後一行

3.原檔案中刪除第 1 行
$ sed -i '1d' regular_express.txt


4.在第二行後添加 test 字串
$ nl regular_express.txt | sed '2a test'


5.在第二行前添加 test 字串
$ nl regular_express.txt | sed '2i test'


6.在第二行後加入兩行 test,“\n”表示分行符號
$ nl regular_express.txt | sed '2a    test\ntest'


7.替換
$ nl regular_express.txt | sed '2,5c No2-5number'


8.列出需要的幾行
$ nl regular_express.txt |sed -n '5,7p'


9.替換字串
sed 's/被替換字串/新字串/g'

5.擴充Regex 事實上,一般實驗者只需要熟悉基礎的Regex就足夠了。不過有時候為了簡化命令操作,瞭解一些使用範圍更廣的擴充運算式,會更加方便。

簡單對比:
$ grep -v '^$' regular_express.txt |grep -v '^#'$ egrep -v '^$|^#' regular_express.txt



+ :表示重複一個或一個以上的前一個 RE 字元
$ egrep -n 'go+d' regular_express.txt$ grep -n 'goo*d' regular_express.txtgod    good



() :表示找出群組字串
$ egrep -n 'g(la|oo)d' regular_express.txt也就是搜尋(glad)或 good 這兩個字串






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.