今天寫指令碼,刪除配置檔案中乙個配置項,內容如下:
# /home/ren/xiao/qiang = 100
/home/ren/xiao/qiang = 100
操作結果:刪除未注釋項,保留注釋專案
操作: sed '/^[^#] \/home\/ren\/xiao\/qiang = 100/d' file.cfg
[^#] 表示非#號的任意字元,它最終要匹配乙個字元,因此它匹配行為在/home前必需要以一非#字元才可以匹配。
趁此機會,找篇正規表示式的文章一同學習下吧。
1. 每一種語言都有單詞表,只有記住了單詞,才能靈活造句,而正規表示式的單詞表就是其元資料,常用元資料如下:
1> . 匹配除換行符以外的任意字元
2> ^ 匹配字串的開始
3> $ 匹配字串的結束
4> \b 匹配單詞的開始或者結束
\b 匹配非單詞邊界
5> \w 匹配字母或者數字或者下劃線或者漢字 , 等價於[a-za-z0-9_]
\w 匹配非字母或者非數字或者非下劃線或者非漢字,等價於[^a-za-z0-9_]
6> \d 匹配數字,等價於[0-9]
\d 匹配非數字,等價於[^0-9]
7> \s 匹配任何空白字元,包括空格、製表符、換頁符號等,等價於[\f\n\r\t\v]
\s 匹配任何非空白字元,等價於[^\f\n\r\t\v]
其中: \f 換頁符 \r 回車符 \n 換行符 \t 製表符 \v 垂直製表符
2. 字元轉義 ,通過在字元前加\ ,如想要輸出字元\ ,需要\\表示
3. 重複限定符:
1> * 重複0次或者更多次
2> + 重複一次或者更多次
3> ? 重複0次或者一次
4> 重複n次
5> 重複m次或者更多次
6> 重複m到n次
4. 在中,特殊字元除^ -外將不再轉義,如[.?!]匹配標點符號( .或者?或者)
5. 分支原則 |
6. 分組:( )
重複限定詞只能指定單個字元的重複,( )可以實現多個字元重複,通過()與重複限定詞結合,可以實現字表示式重複。
如:(\d\.)
7. 後向引用
在()分組後,缺省會為每乙個分組分配乙個組號,後面程序或者表示式可以通過這個組號對此表示式引用。
如:\b(\w+)\b\s+\1\b 這裡(\w+)會被預設分組為1,後面\1可以實現對其的引用
(?\w+) 或者(?'word'\w+) 可以把\w+ 的組名指定為word
8. 零寬斷言 <?=exp> <?<=exp>
9. 負零寬斷言<?!exp>
10. 貪婪與懶惰
當正規表示式中包含能夠重複的限定詞時,通常的情況是匹配盡可能多的字元,比如: a.*b與字串aaabbbcb,將匹配aaabbbcb字串,這就成為貪婪。
但是,有時我們需要匹配盡量少的字元,及懶惰匹配,實現很簡單,只需要在貪婪匹配的後面加上乙個?即可。
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...