在使用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 第乙個字元如果是 ...