grep和正規表示式

2022-08-23 02:27:08 字數 2929 閱讀 4184

正規表示式示例表

字 符 意 義 示 例

* 任意長度的字串。 a* 表示: 空字串、aaaa、a…

? 長度為0或者1的字串。 a? 表示: 空字串和a。

+ 長度為乙個或者多個的字串。 a+表示:a、aa、aaaaaa…

. 任意字元。 a. 表示:a後跟任意字元。

{} 代表上一規則重複數目、

包含一組匹配花括號,裡面有兩個數字和乙個字元,表示在指定次數範圍內找到字元。 a表示:三個a、

a表示:乙個到三個a、

a 表示:大於等於三個a、

表示在3到7次重複範圍內匹配字元a。

集合,代表方括號中任意乙個字元。 [ab] 表示:a或者b都可以、

[a-z] 表示:從a到z的字元。

() 組,代表一組字元。 (ab)表示:abab。

a/b 同時滿足。 a/b表示:字串a後跟字串b才能滿足要求。

a|b 並列,代表符合a或者符合b都可以 a|b表示: 字串a或者字串b都滿足要求。

^ 如果放在開頭表示代表該規則必須在字串的開頭,其他位置代表字元本身。

如果放在中的開頭表示對該集合取反,其他位置代表字元本身。 ^a表示:a必須在字串的開頭、

[^a]表示:除了a以外的其他字元。

$ 如果放在最後表示該規則必須放在最後,其他位置代表字元本身。 a$表示:a必須在字串最後。

\:s 正規表示式用 \:s 表示空格。 a\:sb 匹配 a b。

\:a 正規表示式用 \:a 表示字元與數字。 a\:a 匹配 ab、a6 等。

\:c 正規表示式用 \:c 僅表示字元。 a\:c 匹配 ac等,不匹配a1等。

\:p 正規表示式用 \:p 表示可列印字元。

\:d 正規表示式用 \:d 僅表示數字。 a\:c 匹配 a1等,不匹配ac等。

\:x00 正規表示式用 \:x00 表示ascii字元。

\:r 正規表示式用 \:r 表示回車。

\:n 正規表示式用 \:d 表示換行。

一 正規表示式

基本元字符集及其含義

^     只只匹配行首

$     只只匹配行尾

*     只乙個單字元後緊跟*,匹配0個或多個此單字元

[ ]   只匹配[ ]內字元。可以是乙個單字元,也可以是字串行。可以使用-

表示[ ]內字串行範圍,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]

\     只用來遮蔽乙個元字元的特殊含義。因為有時在shell中一些元字元有

特殊含義。\可以使其失去應有意義

.     只匹配任意單字元

pattern\      只用來匹配前面pattern出現次數。n為次數

pattern\m    只含義同上,但次數最少為n

pattern\    只含義同上,但pattern出現次數在n與m之間

二 grep 的用法

1 雙引號引用

在grep命令中輸入字串引數時,最好將其用雙引號括起來

2 grep選項

常用的grep選項有:

-c 只輸出匹配行的計數。

-i 不區分大小寫(只適用於單字元)。

-h 查詢多檔案時不顯示檔名。

-l 查詢多檔案時只輸出包含匹配字元的檔名。

-n 顯示匹配行及行號。

-s 不顯示不存在或無匹配文字的錯誤資訊。

-v 顯示不包含匹配文字的所有行。

-oprint each match, but only the match, not the entire line.

3 精確匹配

使用grep抽取精確匹配的一種更有效方式是在抽取字串後加\>。假定現在精確抽取48,則為"48\>"

三 grep和正規表示式

使用正規表示式時最好用單引號括起來,這樣可以防止grep中使用的專有模式與一些shell命令的特殊方式相混淆。

1 模式範圍

假定要抽取**為484和483的城市位置,上一章中講到可以使用[ ]來指定字串範圍,這裡用48開始,

以3或4結尾,這樣抽出484或483。grep '48[34]' data.f

2 不匹配行首

如果要抽出記錄,使其行首不是48,可以在方括號中使用^記號,表明查詢在行首開始。

grep '^[^48]' data.f

3 匹配任意字元

如果抽取以l開頭,以d結尾的所有**,可使用下述方法,因為已知**長度為5個字元:

grep 'l...d' data.f

4 日期查詢

乙個常用的查詢模式是日期查詢。先查詢所有以5開始以1 9 9 6或1 9 9 8結尾的所有記錄。使用模式5..199[6,8].這意味著第乙個字元為 5,後跟兩個點,接著是199,剩餘兩個數字是6或8。

grep '5..199[6,8]' data.f

查詢包含1998的所有記錄的另外一種方法是使用表示式[0-9]\[8],含義是任意數字重複3次,後跟數字8,雖然這個方法不像上乙個方 法那麼精確,但也有一定作用。

5 使用grep匹配「與」或者「或」模式

grep命令加- e引數,這一擴充套件允許使用擴充套件模式匹配。例如,要抽取城市**為2 1 9或2 1 6,方法如下:

grep -e '219|216' data.f

6 空行

結合使用^和$可查詢空行。使用- n引數顯示實際行數:

grep '^$' data.f

7 grep 與類名的使用

類等價的正規表示式類等價的正規表示式

[[:upper:]]   [a-z]               [[:alnum:]] [0-9a-za-z]

[[:lower:]]   [a-z]               [[:space:]] 空格或t a b鍵

[[:digit:]]   [0-9]                [[:alpha:]] [a-za-z]

grep和正規表示式

常用引數 f 規則檔案 file 規則檔案 指定規則檔案,其內容含有乙個或多個規則樣式,讓grep查詢符合規則條件的檔案內容,格式為每行乙個規則樣式。grep規則表示式 錨定行的開始 如 grep匹配所有以grep開頭的行 錨定行的結束,如 grep 匹配所有以grep結尾的行 匹配 乙個非換行符的...

grep和正規表示式

grep語法 正規表示式元字元 擴充套件正規表示式元字元 grep grep global search regular expression re and print out the line 是一款文字過濾 模式 pattern 工具。作用 文字搜尋工具,根據使用者指定的 模式 對目標文字逐行進...

正規表示式和grep

正規表示式 regular expression,re 是一種字元模式,用於在查詢過程中匹配指定的字元。在大多數程式裡,正規表示式都被置於兩個正斜槓之間 例如 lv o0 e 就是由正斜槓界定的正規表示式,它將匹配被查詢的行中任何位置出現的相同模式。在正規表示式中,元字元是最重要的概念。shell萬...