久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Bash腳本中正則表達式怎么用

151次閱讀
沒有評論

共計 2326 個字符,預計需要花費 6 分鐘才能閱讀完成。

這篇文章主要介紹了 Bash 腳本中正則表達式怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

正則表達式(簡寫為 regex 或者 regexp)基本上是定義一種搜索模式的字符串,可以被用來執行“搜索”或者“搜索并替換”操作,也可以被用來驗證像密碼策略等條件。

正則表達式是一個我們可利用的非常強大的工具,并且使用正則表達式的優點是它能在幾乎所有計算機語言中被使用。所以如果你使用 Bash 腳本或者創建一個 python 程序時,我們可以使用正則表達式,或者也可以寫一個單行搜索查詢。

在這篇教程中,我們將會學習一些正則表達式的基本概念,并且學習如何在 Bash 中通過 grep 使用它們,但是如果你希望在其他語言如 python 或者 C 中使用它們,你只能使用正則表達式部分。那么讓我們通過正則表達式的一個例子開始吧,

正則表達式看起來像 /t[aeiou]l/ 這個樣子。

但這是什么意思呢?它意味著所提到的正則表達式將尋找一個詞,它以 t 開始,在中間包含字母 a e i o u 中任意一個,并且字母 l 最為 *** 一個字符。它可以是 tel,tal 或者 til,可以匹配一個單獨的詞或者其它單詞像 tilt,brutal 或者 telephone 的一部分。

grep 使用正則表達式的語法是 $ grep regex_search_term file_location

如果不理解,不要擔心,這只是一個例子,來展示可以利用正則表達式獲取什么,相信我,這是最簡單的例子。我們可以從正則表達式中獲取更多。現在我們將從正則表達式基礎的開始。

推薦閱讀: 你應該知道的有用的 linux 命令

基礎的正則表示式

現在我們開始學習一些被稱為元字符 MetaCharacters 的特殊字符。它們可以幫助我們創建更復雜的正則表達式搜索項。下面提到的是基本元字符的列表,

. 點將匹配任意字符

[] 將匹配一個字符范圍

[^] 將匹配除了括號中提到的那個之外的所有字符

* 將匹配零個或多個前面的項

+ 將匹配一個或多個前面的項

? 將匹配零個或一個前面的項

{n} 將匹配 n 次前面的項

{n,} 將匹配 n 次或更多前面的項

{n,m} 將匹配在 n 和 m 次之間的項

{,m} 將匹配少于或等于 m 次的項

\ 是一個轉義字符,當我們需要在我們的搜索中包含一個元字符時使用

現在我們將用例子討論所有這些元字符。

.(點)

它用于匹配出現在我們搜索項中的任意字符。舉個例子,我們可以使用點如:

$ grep  d.g  file1

這個正則表達式意味著我們在名為 lsquo;file1 rsquo; 的文件中查找的詞以 d 開始,以 g 結尾,中間可以有 1 個字符的字符串。同樣,我們可以使用任意數量的點作為我們的搜索模式,如 T……h,這個查詢項將查找一個詞,以 T 開始,以 h 結尾,并且中間可以有任意 6 個字符。

[]

方括號用于定義字符范圍。例如,我們需要搜索一些特別的單詞而不是匹配任何字符,

$ grep  N[oen]n  file2

這里,我們正尋找一個單詞,以 N 開頭,以 n 結尾,并且中間只能有 o、e 或者 n 中的一個。在方括號中我們可以提到單個到任意數量的字符。

我們在方括號中也可以定義像 a- e 或者 1-18 作為匹配字符的列表。

[^]

這就像正則表達式的 not 操作。當使用 [^] 時,它意味著我們的搜索將包括除了方括號內提到的所有字符。例如,

$ grep  St[^1-9]d  file3

這意味著我們可以擁有所有這樣的單詞,它們以 St 開始,以字母 d 結尾,并且不得包含從 1 到 9 的任何數字。

到現在為止,我們只使用了僅需要在中間查找單個字符的正則表達式的例子,但是如果我們需要更多字符該怎么辦呢。假設我們需要找到以一個字符開頭和結尾的所有單詞,并且在中間可以有任意數量的字符。這就是我們使用乘數元字符如 + * 與 ? 的地方。

{n}、{n,m}、{n,} 或者 {,m} 也是可以在我們的正則表達式項中使用的其他乘數元字符。

* (星號)

以下示例匹配字母 k 的任意出現次數,包括一次沒有:

$ grep  lak*  file4

它意味著我們可以匹配到 lake、la 或者 lakkkk。

+

以下模式要求字符串中的字母 k 至少被匹配到一次:

$ grep  lak+  file5

這里 k 在我們的搜索中至少需要發生一次,所以我們的結果可以為 lake 或者 lakkkk,但不能是 la。

?

在以下模式匹配中

$ grep  ba?b  file6

匹配字符串 bb 或 bab,使用 ? 乘數,我們可以有一個或零個字符的出現。

非常重要的提示

當使用乘數時這是非常重要的,假設我們有一個正則表達式

$ grep  S.*l  file7

我們得到的結果是 small、silly,并且我們也得到了 Shane is a little to play ball。但是為什么我們得到了 Shane is a little to play ball?我們只是在搜索中尋找單詞,為什么我們得到了整個句子作為我們的輸出。

這是因為它滿足我們的搜索標準,它以字母 s 開頭,中間有任意數量的字符并以字母 l 結尾。那么,我們可以做些什么來糾正我們的正則表達式來只是得到單詞而不是整個句子作為我們的輸出。

我們在正則表達式中需要增加 ? 元字符,

$ grep  S.*?l  file7

這將會糾正我們正則表達式的行為。

\

\ 是當我們需要包含一個元字符或者對正則表達式有特殊含義的字符的時候來使用。例如,我們需要找到所有以點結尾的單詞,所以我們可以使用:

$ grep  S.*\\.  file8

這將會查找和匹配所有以一個點字符結尾的詞。

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“Bash 腳本中正則表達式怎么用”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計2326字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 崇仁县| 三河市| 韩城市| 平顶山市| 富阳市| 武山县| 洪湖市| 海林市| 江城| 高阳县| 清涧县| 尚义县| 巢湖市| 武清区| 黎平县| 无为县| 梓潼县| 鄢陵县| 岑溪市| 林州市| 共和县| 崇阳县| 锡林浩特市| 宁陕县| 辉县市| 犍为县| 旺苍县| 凤庆县| 东阳市| 焦作市| 施甸县| 通许县| 龙岩市| 治县。| 岢岚县| 个旧市| 景洪市| 土默特左旗| 阿克苏市| 阿坝| 新疆|