linux正規表示式的使用

2021-07-22 16:36:37 字數 3550 閱讀 1169

在使用grep、awk和sed命令時,需要使用正規表示式。

這裡說下正規表示式基本的應用:

• 匹配行首與行尾。

• 匹配資料集。

• 只匹配字母和數字。

• 匹配一定範圍內的字串集。

^只匹配行首

$只匹配行尾

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

匹配內字元,可以是乙個單字元,也可以是字串行。可以使用 - 表示內字串行範圍,如用[1-5]代替[12345]

\用來遮蔽乙個元字元的特殊含義。因為有時在shell中一些元字元有特殊含義。\可以使其失去應有含義。

.匹配任意單字元

pattern\

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

pattern\

含義同上,但次數最少為n

patter\

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

1. 使用句點匹配單字元

句點「.」可以匹配任意單字元。「.」可以匹配字串頭,也可以是中間任意字元。

如t. ,可以匹配test,也可以匹配tmp.

karry@karry-vostro-230:~/util/shell$ ls -al | grep t.

-rwxrwxr-x 1 karry karry   50  9月 12 17:35 test1

-rwxr--r-- 1 karry karry   91  9月 12 17:45 test2

-rwxr--r-- 1 karry karry  127  9月 12 17:54 test3

drwxrwxr-x 2 karry karry 4096  9月 12 17:54 tmp

在ls-l命令中,可以匹配一定許可權:

karry@karry-vostro-230:~/util/shell$ ls -al | grep ..x..x..x

drwxr-xr-x 3 karry karry 4096  9月 12 17:54 .

drwxrwxr-x 4 karry karry 4096  9月 12 17:33 ..

-rwxrwxr-x 1 karry karry   50  9月 12 17:35 test1

drwxrwxr-x 2 karry karry 4096  9月 12 17:54 tmp

2. 在行首以^匹配字串或字串行

^只允許在一行的開始匹配字元或單詞。例如,使用ls-l命令,並匹配目錄。之所以可以

這樣做是因為ls-l命令結果每行第乙個字元是d,即代表乙個目錄。

karry@karry-vostro-230:~/util/shell$ ls -al |grep ^d

drwxr-xr-x 3 karry karry 4096  9月 12 17:54 .

drwxrwxr-x 4 karry karry 4096  9月 12 17:33 ..

drwxrwxr-x 2 karry karry 4096  9月 12 17:54 tmp

3.在行尾以$匹配字串或字元

可以說$與^正相反,它在行尾匹配字串或字元,$符號放在匹配單詞後。

karry@karry-vostro-230:~/util/shell$ ls -al|grep [0-9]$

總用量 24

-rwxrwxr-x 1 karry karry   50  9月 12 17:35 test1

-rwxr--r-- 1 karry karry   91  9月 12 17:45 test2

-rwxr--r-- 1 karry karry  127  9月 12 17:54 test3

4.使用*匹配字串中的單字元或其重複序列

使用此特殊字元匹配任意字元或字串的重複多次表示式。

karry@karry-vostro-230:~/util/shell$ ls -al | grep t*t

-rwxrwxr-x 1 karry karry   50  9月 12 17:35 test1

-rwxr--r-- 1 karry karry   91  9月 12 17:45 test2

-rwxr--r-- 1 karry karry  127  9月 12 17:54 test3

drwxrwxr-x 2 karry karry 4096  9月 12 17:54 tmp

karry@karry-vostro-230:~/util/shell$ ls -al | grep t*

karry@karry-vostro-230:~/util/shell$ ls -al | grep *p

drwxrwxr-x 2 karry karry 4096  9月 12 17:54 tmp

karry@karry-vostro-230:~/util/shell$ ls -al | grep *1

-rwxrwxr-x 1 karry karry   50  9月 12 17:35 test1

karry@karry-vostro-230:~/util/shell$ ls -al | grep *[0-9]

5.使用\遮蔽乙個特殊字元的含義

有時需要查詢一些字元或字串,而它們包含了系統指定為特殊字元的乙個字元。

下列字元可以認為是特殊字元:

$ . ' " * [ ] ^ | \ + ?

6. 使用匹配乙個範圍或集合

使用匹配特定字串或字串集.

使用「-」表示乙個字串範圍,表明字串範圍從「-」左邊字元開始,到「-」右邊字

符結束。

如果熟知乙個字串匹配操作,應經常使用模式。

假定要匹配任意乙個數字,可以使用:

[0123456789]

然而,通過使用「-」符號可以簡化操作:

[0-9]

或任意小寫字母

[a-z]

要匹配任意字母,則使用:

[a-za-z]

表明從a-z、a-z的字母範圍。

如要匹配任意字母或數字,模式如下:

[a-za-z0-9]

注意^符號的使用,當直接用在第乙個括號裡,意指否定或不匹配括號裡內容。

[^a-za-z]

匹配任一非字母型字元,而

[^0-9]

匹配任一非數字型字元。

7. 使用\匹配模式結果出現的次數

使用*可匹配所有匹配結果任意次,但如果只要指定次數,就應使用\,此模式有三種

形式,即:

pattern\匹配模式出現n次。

pattern\匹配模式出現最少n次。

pattern\匹配模式出現n到m次之間,n , m為0 - 2 5 5中任意整數。

測試test.txt,內容如下:

988451123321

110911

hello

abc

karry@karry-vostro-230:~/util/shell$ cat test.txt|grep '^[0-9]\'

988451

123321

110911

karry@karry-vostro-230:~/util/shell$ cat test.txt|grep 'l\'

hello

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...

linux正規表示式 Linux 的正規表示式

我們通過sed或awk工具可以輕鬆愉快的對一堆文字分析 對資料進行處理 伺服器報錯日誌的分析 伺服器使用者訪問日誌統計分析等。但是要玩耍好sed和awk工具,正規表示式是基礎,不得不掌握。特定字元 如 1 a a 範圍字元數字字元 0 9 代表0到9數字中的任意乙個 小寫字元 a z 代表a到z字母...

python正規表示式及使用正規表示式的例子

正規表示式 正則表達用來匹配字串 正規表示式匹配過程 正規表示式語法規則 匹配除換行 n 外的任意字串 abcabc 轉義字元,使後乙個字元改變原來的意思 a c a c 字符集,對應的位置可以是字符集中任意字元,字符集中的字元可以逐個列出,也可以給出範圍,如 abc 或 a c 第乙個字元如果是 ...