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 次或更多次時 |
- 括號擴充套件用於生成字串,它有助於建立多個字串。