Linux 正規表示式 Grep Regex

什麼是正規表示式?

正規表示式是特殊字元,可幫助搜尋資料,匹配複雜模式。正規表示式縮寫為 regexpregex

為了便於理解,讓我們逐一學習不同型別的正規表示式。

基本正規表示式

一些常用的正規表示式命令是 trsedvigrep。下面列出了一些基本的正規表示式。

符號 描述
. 替換任何字元
^ 匹配字串的開頭
$ 匹配字串的結尾
* 匹配前一個字元的零個或多個
\ 代表特殊字元
() 正規表示式組
? 恰好匹配一個字元

我們來看一個例子吧。

cat 來檢視檔案的內容

dishan@vultr:~$ cat sample
apple
bat
ball
ant
eat
pant
people
taste

搜尋包含字母 a 的內容。

dishan@vultr:~$ cat sample | grep a
apple
bat
ball
ant
eat
pant
taste

^ 匹配字串的開頭。讓我們搜尋帶有以 a 為開頭的內容

dishan@vultr:~$ cat sample | grep ^a
apple
ant

以上命令僅過濾以字元開頭的行,並且忽略開頭不包含字元 a 的行。

讓我們看看另一個例子 -

dishan@vultr:~$ cat sample | grep t
bat
ant
eat
pant
taste

下面的命令使用 $ 僅選擇以 t 結尾的行。

dishan@vultr:~$ cat sample | grep t$
bat
ant
eat
pant

區間正規表示式

這些表示式告訴我們字串中字元的出現次數。他們是

表達 說明
{n} 匹配前面的字元恰好出現 n
{n, m} 匹配前面的字元出現 n 次但不超過 m
{n, } 匹配前一個字元出現 n 次或更多次時

例:

過濾包含字元 p 的所有行

dishan@vultr:~$ cat sample | grep p
apple
pant
people

我們想要檢查字元 p 在的字串中正好出現 2 次。為此,語法將是:

cat sample | grep -E p\{2}

注意:你需要新增 -E 來使用這些正規表示式。

擴充套件正規表示式

這些正規表示式包含多個表示式的組合。他們之中有一些是:

表達 說明
+ 匹配前一個字元的一次或多次
? 匹配前一個字元零次或一次

例:

搜尋所有字元 t

dishan@vultr:~$ cat sample | grep t
bat
ant
eat
pant
taste

假設我們要過濾字元 a 在字元 t 之前的行

我們可以使用命令

cat sample|grep "a\+t"
dishan@vultr:~$ cat sample | grep "a\+t"
bat
eat

括號擴充套件

括號擴充套件的語法是大括號 {} 內的序列或逗號分隔的項列表。序列中的起始和結束項由兩個點 .. 分隔。

舉幾個例子:

guru99@virtualBox:- echo {aa, bb,cc,dd} 
aa bb cc dd 
guru99@VirtualBox:-$ echo 0..11) 0 1 2 3 4 5 6 7 8 9 10 11 
guru99@virtualBox:-$ echo {a..Z} abcdefghijklmnopqrstuvw x y z 
guru99@virtualBox:-$ echo a{0..9}b 
aob alb a2b a3ba4b a5b a6b a7ba8b a9b

echo 命令使用大括號擴充套件建立字串。

總結:

  • 正規表示式是一組用於檢查字串模式的字元
  • 學習編寫指令碼的正規表示式很重要
  • 一些基本的正規表示式是:
符號 描述
. 替換任何字元
^ 匹配字串的開頭
$ 匹配字串的結尾
  • 一些擴充套件的正規表示式是:
表達 說明
+ 匹配前一個字元的一個或多個匹配項
? 匹配前一個字元的零次或一次
  • 一些區間正規表示式是:
表達 說明
{n} 匹配前面的字元恰好出現 n
{n, m} 匹配前面的字元出現 n 次但不超過 m
{n, } 匹配前一個字元出現 n 次或更多次時
  • 括號擴充套件用於生成字串,它有助於建立多個字串。