shell程式設計 正規表示式

2021-07-14 03:24:17 字數 3479 閱讀 3614

正規表示式是用於字元排列和匹配模式的一種語法規則。它主要用於字串的模式分割、匹配、查詢及替換操作。

萬用字元:

元字元作用*

前乙個字元匹配0次或任意多次。

.匹配除了換行符外任意乙個字元。

^匹配行首。例如^hello會匹配以hello開頭的行。

$匹配行尾。例如hello$會匹配以hello結尾的行。

匹配中括號中指定的任意乙個字元,只匹配乙個字元。例如[aoeiu]匹配任意乙個母音字元,[0-9]匹配任意乙個數字,[a-z][0-9]匹配小寫字和一位數字構成的兩位字元

[^]匹配除中括號的字元以外的任意乙個字元。例如:[^0-9]匹配任意一位非數字字元,[^a-z]表示任意一位非小寫字母。

\轉義符。用於取消講特殊符號的含義取消。

\表示其前面的字元恰好出現n次。例如[0-9]\匹配4位數字,

\表示前面的字元至少出現一次,最多出現m次。例如[a-z]\匹配6到8位的小寫字母。

補充:

?()屬於擴充套件正則

修改~/.bashrc配置檔案,為grep起別名,將匹配出來的用顏色顯示alias grep=』grep –color=auto』

例如:*號的示例

[root@localhost home]# grep aa* test.txt aaa

aaaaaaa

aaaaa

abaabb

例如

「.」:匹配除了換行符外任意乙個字元

「s..d」:會匹配在s和d這兩個字母之間一定有兩個字元的單詞

[root@localhost home]# grep "s..d" test.txt 

said

soid

sdkdkdkd

「s.*d」:匹配在s和d字母之間有任意字元

[root@localhost home]# grep "s.*d" test.txt 

said

soid

sdkdkdkd

「.*」:匹配所有內容

[root@localhost home]# grep ".*" test.txt aaa

aaaaaaa

aaaaa

abaabbbbb

bbbbbbb

bbbb

said

soid

sdkdkdkd

例如

「^」匹配行首,」$」匹配行尾

「^m」:匹配以大寫「m」開頭的行

[root@localhost home]# grep "^a" test.txt aaa

aaaaaaa

aaaaa

abaabb

「n$」:匹配以小寫「n」結尾的行

[root@localhost home]# grep "b$" test.txt 

abaabbbbb

bbbbbbb

bbbb

「^$」:匹配空白行顯示,增加-n選項,顯示行號

[root@localhost home]# grep -n "^$" test.txt 

6:9:

15:16:

例如

「」 : 匹配中括號中指定的任意乙個字元,只匹配乙個字元。

「s[ao]id」:匹配s和i字母中間,要麼是a,要麼是o的字串

[root@localhost home]# grep -n "s[ao]id" test.txt 

17:said

18:soid

「[0-9]」:匹配包括任意乙個數字的行

[root@localhost home]# grep

-n "[0-9]" test

.txt

22:6adfadfadf8

23:jladf8002378

25:ladfjadf7

27:3333333333

29:2222222222

「^[a-z]」:匹配用小寫字母開頭的行

[root@localhost home]# grep "^[a-z]" test.txt aaa

aaaaaaa

aaaaa

abaabbbbb

bbbbbbb

bbbb

said

soid

sdkdkdkd

jladf8002378

ladfjadf7

「[a-z]$」:匹配用小寫字母結尾的行

[root@localhost home]# grep "[a-z]$" test.txt aaa

aaaaaaa

aaaaa

abaabbbbb

bbbbbbb

bbbb

said

soid

sdkdkdkd

[root@localhost home]# grep "^[a-z]$" test.txt ab

[root@localhost home]# grep "^[a-z][a-z]$" test.txt

aaab

bb

「[^]」:匹配除中括號的字元以外的任意字元。(說明:^放在中括號內)

「^[^a-z]」:匹配不用小寫字母開頭的行

[root@localhost home]# grep "^[^a-z]" test.txt 

6adfadfadf8

3333333333

2222222222

「^[^a-za-z]」:匹配不用字母開頭的行

[root@localhost home]# grep "^[^a-za-z]" test.txt 

6adfadfadf8

3333333333

2222222222

「\」:轉義字元,作用讓特殊的字元喪失意義

「.$」:匹配使用」.」結尾的行

[root@localhost home]# grep "\.$" test.txt 

6adfadfadf8.

「\」:表示其前面的字元恰好出現n次

「a\」:匹配a字母連續出現三次的字串。

注意:至少重複3次,匹配出來的結果顯示超過3個字串也會顯示到結果中

[root@localhost home]# grep "a\" test.txt 

aaaaaaa

aaaaa

「[0-9]\」:匹配包括連續的三個數字的字串

要想準確查詢,需要加定界符

shell程式設計 正規表示式

正規表示式是一種用於文字匹配的通用語言。正規表示式的基本組成部分 正規表示式 描述例子 行起始標記 abc匹配以abc起始的行 行結束標記 abc 匹配以abc結束的行 匹配任意乙個字元 abc 匹配abc後跟任意乙個字元 匹配包含在 字元 之中的任意乙個字元 abc de 匹配abcd 或者 ab...

shell程式設計 正規表示式

正規表示式是一種文字模式匹配,包括普通字元和特殊字元,它是一種字串匹配模式,可以用來檢查乙個字串是否含有某種子串,將匹配的子串替換或者從某個字串中取出某個條件的子串。shell也支援正規表示式,但不是所有命令都支援正規表示式,常見的命令只有grep sed awk命令支援正規表示式。示例 資料來源 ...

shell程式設計之正規表示式

1 正規表示式 其實就是一種規範,也就是模式,約束字串等符合什麼樣的格式,比如要求字串必須a開頭,t結尾,符合這樣條件的字串就要用到正規表示式。2 兩套庫 gnu linux中有有兩套庫用足正規表示式程式設計,posix庫,自帶的 pcre庫,perl,功能比較全,本文採用perl。3 初體驗 eg...