您好,登錄后才能下訂單哦!
這篇文章主要介紹了Bash腳本中正則表達(dá)式怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
正則表達(dá)式(簡寫為 regex 或者 regexp)基本上是定義一種搜索模式的字符串,可以被用來執(zhí)行“搜索”或者“搜索并替換”操作,也可以被用來驗(yàn)證像密碼策略等條件。
正則表達(dá)式是一個(gè)我們可利用的非常強(qiáng)大的工具,并且使用正則表達(dá)式的優(yōu)點(diǎn)是它能在幾乎所有計(jì)算機(jī)語言中被使用。所以如果你使用 Bash 腳本或者創(chuàng)建一個(gè) python 程序時(shí),我們可以使用正則表達(dá)式,或者也可以寫一個(gè)單行搜索查詢。
在這篇教程中,我們將會(huì)學(xué)習(xí)一些正則表達(dá)式的基本概念,并且學(xué)習(xí)如何在 Bash 中通過 grep
使用它們,但是如果你希望在其他語言如 python 或者 C 中使用它們,你只能使用正則表達(dá)式部分。那么讓我們通過正則表達(dá)式的一個(gè)例子開始吧,
正則表達(dá)式看起來像 /t[aeiou]l/
這個(gè)樣子。
但這是什么意思呢?它意味著所提到的正則表達(dá)式將尋找一個(gè)詞,它以 t
開始,在中間包含字母 a e i o u
中任意一個(gè),并且字母 l
最為***一個(gè)字符。它可以是 tel
,tal
或者 til
,可以匹配一個(gè)單獨(dú)的詞或者其它單詞像 tilt
,brutal
或者 telephone
的一部分。
grep 使用正則表達(dá)式的語法是 $ grep "regex_search_term" file_location
如果不理解,不要擔(dān)心,這只是一個(gè)例子,來展示可以利用正則表達(dá)式獲取什么,相信我,這是最簡單的例子。我們可以從正則表達(dá)式中獲取更多。現(xiàn)在我們將從正則表達(dá)式基礎(chǔ)的開始。
推薦閱讀: 你應(yīng)該知道的有用的 linux 命令
現(xiàn)在我們開始學(xué)習(xí)一些被稱為元字符的特殊字符。它們可以幫助我們創(chuàng)建更復(fù)雜的正則表達(dá)式搜索項(xiàng)。下面提到的是基本元字符的列表,
.
點(diǎn)將匹配任意字符
[ ]
將匹配一個(gè)字符范圍
[^ ]
將匹配除了括號(hào)中提到的那個(gè)之外的所有字符
*
將匹配零個(gè)或多個(gè)前面的項(xiàng)
+
將匹配一個(gè)或多個(gè)前面的項(xiàng)
?
將匹配零個(gè)或一個(gè)前面的項(xiàng)
{n}
將匹配 n 次前面的項(xiàng)
{n,}
將匹配 n 次或更多前面的項(xiàng)
{n,m}
將匹配在 n 和 m 次之間的項(xiàng)
{,m}
將匹配少于或等于 m 次的項(xiàng)
\
是一個(gè)轉(zhuǎn)義字符,當(dāng)我們需要在我們的搜索中包含一個(gè)元字符時(shí)使用
現(xiàn)在我們將用例子討論所有這些元字符。
.
(點(diǎn))它用于匹配出現(xiàn)在我們搜索項(xiàng)中的任意字符。舉個(gè)例子,我們可以使用點(diǎn)如:
$ grep "d.g" file1
這個(gè)正則表達(dá)式意味著我們?cè)诿麨?‘file1’ 的文件中查找的詞以 d
開始,以 g
結(jié)尾,中間可以有 1 個(gè)字符的字符串。同樣,我們可以使用任意數(shù)量的點(diǎn)作為我們的搜索模式,如 T......h
,這個(gè)查詢項(xiàng)將查找一個(gè)詞,以 T
開始,以 h
結(jié)尾,并且中間可以有任意 6 個(gè)字符。
[ ]
方括號(hào)用于定義字符范圍。例如,我們需要搜索一些特別的單詞而不是匹配任何字符,
$ grep "N[oen]n" file2
這里,我們正尋找一個(gè)單詞,以 N
開頭,以 n
結(jié)尾,并且中間只能有 o
、e
或者 n
中的一個(gè)。 在方括號(hào)中我們可以提到單個(gè)到任意數(shù)量的字符。
我們?cè)诜嚼ㄌ?hào)中也可以定義像 a-e
或者 1-18
作為匹配字符的列表。
[^ ]
這就像正則表達(dá)式的 not 操作。當(dāng)使用 [^ ]
時(shí),它意味著我們的搜索將包括除了方括號(hào)內(nèi)提到的所有字符。例如,
$ grep "St[^1-9]d" file3
這意味著我們可以擁有所有這樣的單詞,它們以 St
開始,以字母 d
結(jié)尾,并且不得包含從 1
到 9
的任何數(shù)字。
到現(xiàn)在為止,我們只使用了僅需要在中間查找單個(gè)字符的正則表達(dá)式的例子,但是如果我們需要更多字符該怎么辦呢。假設(shè)我們需要找到以一個(gè)字符開頭和結(jié)尾的所有單詞,并且在中間可以有任意數(shù)量的字符。這就是我們使用乘數(shù)元字符如 +
*
與 ?
的地方。
{n}
、{n,m}
、{n,}
或者 {,m}
也是可以在我們的正則表達(dá)式項(xiàng)中使用的其他乘數(shù)元字符。
*
(星號(hào))以下示例匹配字母 k
的任意出現(xiàn)次數(shù),包括一次沒有:
$ grep "lak*" file4
它意味著我們可以匹配到 lake
、la
或者 lakkkk
。
+
以下模式要求字符串中的字母 k
至少被匹配到一次:
$ grep "lak+" file5
這里 k
在我們的搜索中至少需要發(fā)生一次,所以我們的結(jié)果可以為 lake
或者 lakkkk
,但不能是 la
。
?
在以下模式匹配中
$ grep "ba?b" file6
匹配字符串 bb
或 bab
,使用 ?
乘數(shù),我們可以有一個(gè)或零個(gè)字符的出現(xiàn)。
當(dāng)使用乘數(shù)時(shí)這是非常重要的,假設(shè)我們有一個(gè)正則表達(dá)式
$ grep "S.*l" file7
我們得到的結(jié)果是 small
、silly
,并且我們也得到了 Shane is a little to play ball
。但是為什么我們得到了 Shane is a little to play ball
?我們只是在搜索中尋找單詞,為什么我們得到了整個(gè)句子作為我們的輸出。
這是因?yàn)樗鼭M足我們的搜索標(biāo)準(zhǔn),它以字母 s
開頭,中間有任意數(shù)量的字符并以字母 l
結(jié)尾。那么,我們可以做些什么來糾正我們的正則表達(dá)式來只是得到單詞而不是整個(gè)句子作為我們的輸出。
我們?cè)谡齽t表達(dá)式中需要增加 ?
元字符,
$ grep "S.*?l" file7
這將會(huì)糾正我們正則表達(dá)式的行為。
\
\
是當(dāng)我們需要包含一個(gè)元字符或者對(duì)正則表達(dá)式有特殊含義的字符的時(shí)候來使用。例如,我們需要找到所有以點(diǎn)結(jié)尾的單詞,所以我們可以使用:
$ grep "S.*\\." file8
這將會(huì)查找和匹配所有以一個(gè)點(diǎn)字符結(jié)尾的詞。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Bash腳本中正則表達(dá)式怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。