日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文本检索秘技之正则表达式grep和egrep

發(fā)布時間:2025/7/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文本检索秘技之正则表达式grep和egrep 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、總綱(何為正則)

? ?所謂正則,又稱正則表達式、正規(guī)表示法、常規(guī)表示法(英語:Regular Expression,在代碼中常簡寫為regexregexpRE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。(維基百科如是說)

? ?為了便于理解,可以將正則想象成為普通語言,普通字符對應的是普通文字,而元字符則對應語法,根據(jù)語言的規(guī)則,按照語法將文字組合起來,就會表述出你想說的話即想要的文本。

第一式 ?grep是什么

? ?grepglobal search regular expressionRE)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。UNIXgrep家族包括grepegrepfgrepegrepfgrep的命令只跟grep有很小不同。egrepgrep的擴展,支持更多的re元字符,fgrep就是fixed grepfast grep,它們把所有的字母都看做單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,不再特殊。linux使用GNU版本的grep。它功能更強,可以通過-G-E-F命令行選項來使用egrepfgrep的功能。

格式:

grep [OPTIONS] PATTERN [FILE...]

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

第一招:常用選項[OPTIONS]

-v: 反向,顯示不能被模式所匹配到的行;

1 2 #檢索文件/etc/passwd中非#的行 grep?-v?"#"?/etc/passwd

-o: 僅顯示被模式匹配到的字串,而非整行;

1 2 #檢索/etc/passwd文件中有沒有rpcuser用戶 grep?-o?"rpcuser"?/etc/passwd

-i:?不區(qū)分字符大小寫, ignore-case

1 2 #檢索/etc/fstab中包含u中間跟兩個任意字符,最后一個字符為d的行,不區(qū)分大小寫 grep?--color -i?"u..d"?/etc/fstab

-E: 支持擴展的正則表達式(加-E可以使用grep啟用egrep的功能 grep -E)

-A #:之后的幾行字符

-B:之前的幾行字符

-C #:上下兩行

-n: 顯示匹配行及行號,在顯示出內(nèi)容的每行前面會顯示行數(shù)

第二招:模式(PATTERN)

元字符:不表示字符本身的意義,用于額外功能性的描述

字符匹配:

.: 任意單個字符

1 2 #在/etc/passwd文件中檢索包含r后面跟兩個字符,然后是t的行 grep?--color?"r..t"?/etc/passwd

[ ]: 指定范圍內(nèi)的任意單個字符

1 2 #在/etc/inittab下檢索以S或s后面接任意一個字符,之后是s的行 grep?--color?"[sS].s"?/etc/fstab

[[:digit:]] 匹配任何一個數(shù)字([0-9]

1 grep?--color?"jin[[:digit:]]"?/etc/passwd

[[:alnum:]] 匹配任何一個字母或數(shù)字([A-Za-z0-9])

[[:alpha:]] 匹配任何一個字母([A-Za-z])

[[:lower:]] 匹配任何一個小寫字母([a-z])

[[:upper:]] 匹配任何一個大寫字母([A-Z])

[[:space:]] 任何一個空白字符:制表符、空格

[[:punct:]] 任何一個標點符號(不包括:[:alnum:]、[:cntrl:]、[:space:]字符集)

[^]:指定范圍外的任意單個字符

1 2 #在/etc/selinux/config下檢索非標點符號開始的行 grep?--color?"^[^[:punct:]].*"?/etc/selinux/config

位置錨定:用于指定字符出現(xiàn)的位置

^: 錨定行首

$: 錨定行尾

1 2 以bash結(jié)尾的行 grep?--color?"bash$"?/etc/passwd

^$: 空白行

1 2 #統(tǒng)計/etc/init/tty.conf文件中的空行數(shù) grep?"^$"?/etc/init/tty.conf? |wc?-l

\<char: 錨定詞首,也可以寫成\bchar(注:\b是元字符)

1 2 #檢索/etc/passwd 文件中以r為詞首,后面跟兩個任意字符,最后一個字符是t的行 grep?--color?"\br..t"?/etc/passwd

char\>: 錨定詞尾,char\b(注:\b也可以用于錨定詞尾)

1 2 #以s結(jié)尾前面以三個任意字符開頭的系統(tǒng)用戶 grep?--color?"^...s\b"?/etc/passwd

次數(shù)匹配:用來指定匹配其前面的字符的次數(shù)

*: 任意次(0次或多次)

1 2 #a*b重復a為零次或多次(貪婪模式:盡可能的長的去匹配字符;) grep?--color ab*bd?test.txt


.*: 匹配任意長度的任意字符

1 2 #\?: 0次或1次(a\?b 則表示a的匹配一次或一次都沒有) grep?--color?"a\?b"?test.txt

ab*xy:則表示只能匹配*號之前b任意次b(0或多次)

\{m\}: 匹配m次

\{m,n\}:最少匹配m次,最多匹配n次

\{m,\}: 至少m次;

\{0,n\}:至多n次;

分組:

\(\)

1 2 #檢索文件中包含w字符之以es為組后面接t然后任意字符,組es重復一次的行 grep?--color?"w\(es\).*\1"?test.txt

es)被作為一個組看待,它是一個組,它的名稱是1,然后?.*表示之后的任意個字符,[\1]指代的是前面用括號括起來的es。那么??egrep?里的?w(es)t.*\1?就是說?west后面任意字符,再然后再出現(xiàn)es的,這種行被匹配到

引用:

\1: 后向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內(nèi)容。(后向引用可以有多次,方法\#(#:數(shù)字))

第二式:egrep(grep -E)

?grep?的擴充版本,?改良了許多傳統(tǒng)?grep?不能或不便的操作.?比方說:

- grep?之下不支持????+?這兩種?modifier,??egrep?則可. ? ? ?

注:

?: 匹配其前面的字符0或1次;

+: 匹配其前面的字符至少1次

|:表示或關(guān)系,比如 'gd|good|dog' 表示有g(shù)d,good或dog的串

():將部分內(nèi)容合成一個單元組。比如要搜索 glad 或 good 可以這樣 'g(la|oo)d',()的好處是可以對小組使用 + ? * 等。

比如要搜索A和C開頭結(jié)尾,中間有至少一個(xyz) 的串,可以這樣 : 'A(xyz)+C'

- grep?不支持?a|b??(abc|xyz)?這類"或一"比對,??egrep?則可. ?

1 2 3 4 #輸出包含1或2的行 grep?--color?'\(1\|2\)'?/etc/inittab #或 grep?--color -E?'(1|2)'?/etc/inittab

- grep?在處理?{n,m}?,?需用?\{??\}?處理,??egrep?則不需.

諸如此類的...?我個人會建議能用?egrep?就不用?grep?.. ? ? ? ?

第三式:fgrep

不作?RE?處理,?表達式僅作一般字符串處理,?所有?meta?均失去功能.

?============================================================================

PS:以上是本人學習整理內(nèi)容,由于能力有限,如有錯漏,歡迎各種磚頭瓦塊.a_c










本文轉(zhuǎn)自 jinlinger 51CTO博客,原文鏈接:http://blog.51cto.com/essun/1361920,如需轉(zhuǎn)載請自行聯(lián)系原作者 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的文本检索秘技之正则表达式grep和egrep的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。