Linux 正規表示式 Grep Regex
什麼是正規表示式?
正規表示式是特殊字元,可幫助搜尋資料,匹配複雜模式。正規表示式縮寫為 regexp 或 regex。
為了便於理解,讓我們逐一學習不同型別的正規表示式。
基本正規表示式
一些常用的正規表示式命令是 tr,sed,vi 和 grep。下面列出了一些基本的正規表示式。
| 符號 | 描述 | 
|---|---|
| . | 替換任何字元 | 
| ^ | 匹配字串的開頭 | 
| $ | 匹配字串的結尾 | 
| * | 匹配前一個字元的零個或多個 | 
| \ | 代表特殊字元 | 
| () | 正規表示式組 | 
| ? | 恰好匹配一個字元 | 
我們來看一個例子吧。
用 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次或更多次時 | 
- 括號擴充套件用於生成字串,它有助於建立多個字串。