Linux行處理工具之grep?正則表達(dá)式詳解
之前我們學(xué)習(xí)了
linux grep
的基本操作,以及提及了linux grep
的孿生兄弟egrep 和 fgrep
,這次我們來看下。
在介紹正則表達(dá)式之前,我們先來嘗試一下,假如有如下文本。
我們想獲取空行,應(yīng)該如何來寫呢?
命令:
grep ^$ test1 -n
通過上述例子,我們使用正則表達(dá)式^$
已經(jīng)成功拿到了第四行數(shù)據(jù),那么,這究竟如何解呢,我們細(xì)看博文。
正則表達(dá)式在grep應(yīng)用以及差別
grep
表達(dá)式有三種不同的版本,分別為basic
(BRE
) 、extended
(ERE
) 以及 perl
(PCRE
) ,我們grep
默認(rèn)支持的是BRE
,而ERE
是egrep
支持的,或者說是grep -E
支持的, 而PCRE
則是grep -P
支持的,那么這三者究竟有啥區(qū)別呢?
BRE | ERE | PCRE | |||
---|---|---|---|---|---|
任意字符 | . | . | . | ||
前一個(gè)字符0次或者出現(xiàn)1次 | ? | ? | ? | ||
前一個(gè)字符出現(xiàn)0次或無數(shù)次 | * | * | * | ||
前一個(gè)字符出現(xiàn)一個(gè)或者更多 | + | + | + | ||
字符集 | [...] | [...] | [...] | ||
字符集取反 | [^...] | [^...] | [^...] | ||
匹配前面字符出現(xiàn)的n次 | {n} | {n} | {n} | ||
匹配前面字符出現(xiàn)的n次以上 | {n,} | {n,} | {n,} | ||
匹配前面字符出現(xiàn)的n次到m次 | {n,m} | {n,m} | {n,m} | ||
開頭 | |||||
結(jié)尾 | $ | $ | $ | ||
多表達(dá)式連接 | | | ||||
單詞 | \w | \w | \w 或者 [[:word:]] | ||
字母大寫/小寫 | [[:upper:]]/[[:lower:]] | [[:upper:]]/[[:lower:]] | [[:upper:]]/[[:lower:]] | ||
非單詞 | \W | ||||
空白字符 | \s 或者 [[:space:]] | \s 或者 [[:space:]] | |||
非空白字符 | [^[:space:]] | [^[:space:]] | \S | ||
數(shù)字 | \d 或者 [[:digit:]] | [[:digit:]] | [[:digit:]] | ||
非數(shù)字 | \D | [^[:digit:]] | [^[:digit:]] |
那么如何進(jìn)行切換呢? 如上面所示,我們來看下。
如上所述,若我們需要連接多個(gè)匹配項(xiàng),在BRE(grep)
中則是|
,而在ERE(egrep)
和PCRE(grep -P)
中則是|
,所以我們可以順利獲取出結(jié)果,更多匹配項(xiàng)如上所述
匹配案例
匹配電話號(hào)碼
若電話號(hào)碼為xxx-xxxx-xxxx
類型的,如何進(jìn)行匹配呢? 我們可以使用'[0-9]{3}-[0-9]{4}-[0-9]{4}'
進(jìn)行匹配。
例如:
命令:
echo "telphone: 180-1234-5678" | grep '[0-9]{3}-[0-9]{4}-[0-9]{4}' -o
同樣的,該方法還可以用來匹配其ip
地址,正則: [0-9]{0,3}.[0-9]{0,3}.[0-9]{0,3}.[0-9]{0,3}
匹配空行
若我們想匹配空行,則可以使用^$
進(jìn)行匹配,即: 開頭就是結(jié)尾。
例如:
如上命令,我們順利取出了 第3、5、6行數(shù)據(jù)
匹配所有字母
命令:
echo 'Ac123e23dddwQW21' | grep "[[:upper:]]|[[:lower:]]" -o
取出redis
在使用的配置文件
我們知道redis
服務(wù)器是以#
來注釋的,我們可以利用grep
或者egrep
來過濾掉注釋和空格,例如:
fgrep
fgrep
最為簡(jiǎn)單,它不會(huì)啟用正則表達(dá)式,而是按照字符來進(jìn)行搜索,什么意思呢? 我們舉個(gè)小案例就清楚了,
它不會(huì)進(jìn)行任何正則匹配,所以可以直接使用搜索選就成,不用考慮轉(zhuǎn)移啥的。
總結(jié)
我們一般將BRE
稱之為 基本正則表達(dá)式、ERE
稱之為 擴(kuò)展正則表達(dá)式 而 PCRE
稱之為Perl
兼容的正則表達(dá)式,如上正則表達(dá)式不是grep
工具所實(shí)現(xiàn)的,而是單獨(dú)的一套表達(dá)式,有很多語(yǔ)言在使用中,例如 sed
默認(rèn)正則表達(dá)式是 BRE
, 而我們之前所學(xué)習(xí)的awk
使用的正則表達(dá)式則是ERE
,是不是感覺知識(shí)被串聯(lián)起來了呢,好巧,我也是,怎么樣,快來動(dòng)手試驗(yàn)一下吧。
到此這篇關(guān)于Linux行處理工具之grep 正則表達(dá)式詳解的文章就介紹到這了,更多相關(guān)linux grep 正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
正確使用帶有"g"標(biāo)記的javascript正則表達(dá)式
javascript正則表達(dá)式是對(duì)字符串執(zhí)行模式匹配的強(qiáng)大工具。正確使用它會(huì)給我們的工作帶來很大的便利??墒怯行┑胤接捎谖覀儧]有太注意或者根本不理解,就會(huì)遇到不可預(yù)料的麻煩。2009-05-05基于xpath選擇器、PyQuery、正則表達(dá)式的格式清理工具詳解
這篇文章主要介紹了基于xpath選擇器、PyQuery、正則表達(dá)式的格式清理工具,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09精通 JavaScript中的正則表達(dá)式手機(jī)整理 推薦
精通 JS正則表達(dá)式,想學(xué)習(xí)js正則表達(dá)式的朋友非常值得看,整理的比較不錯(cuò)。2009-10-10