1、正則表達式是什麼
正則表達式是用於字符排列和匹配模式的一種語法規則。它主要用於字符串的模式分割、匹配、查找及替換操作。
2、正則表達式與通配符
- 正則表達式用來在文件中匹配符合條件的字符串,正則是包含匹配。grep、awk、sed等命令可以支持正則表達式。
- 通配符用來匹配符合條件的文件名,通配符是完全匹配。ls、find、cp這些命令不支持正則表達式,所以只能使用shell自己的通配符進行匹配了。
通配符:
- *:匹配任意內容
- ?: 匹配任意一個內容
- []:匹配中括號中的一個字符
3、基礎正則表達式
元字符 | 作用 |
---|---|
* | 前一個字符匹配0次或任意多次。 |
. | 匹配除了換行符外任意一個字符。 |
^ | 匹配行首。例如^hello會匹配以hello開頭的行。 |
$ | 匹配行尾。例如hello$會匹配以hello結尾的行。 |
[] | 匹配中括號中指定的任意一個字符,只匹配一個字符。例如[aoeiu]匹配任意一個元音字符,[0-9]匹配任意一個數字,[a-z][0-9]匹配小寫字和一位數字構成的兩位字符 |
[^] | 匹配除中括號的字符以外的任意一個字符。例如:[^0-9]匹配任意一位非數字字符,[^a-z]表示任意一位非小寫字母。 |
\ | 轉義符。用於取消講特殊符號的含義取消。 |
\{n,\} | 表示其前面的字符恰好出現n次。例如[0-9]\{4\}匹配4位數字, |
\{n,m\} | 表示前面的字符至少出現一次,最多出現m次。例如[a-z]\{6,8}匹配6到8位的小寫字母。 |
補充:
?()屬於擴展正則
修改~/.bashrc配置文件,爲grep起別名,將匹配出來的用顏色顯示alias grep=’grep –color=auto’
例如:*號的示例
[root@localhost home]# grep aa* test.txt
a
aa
aaa
aaaa
aaaaa
ab
aabb
例如
“.”:匹配除了換行符外任意一個字符
“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
a
aa
aaa
aaaa
aaaaa
ab
aabb
b
bb
bbb
bbbb
bbbb
said
soid
sdkdkdkd
例如
“^”匹配行首,”$”匹配行尾
“^M”:匹配以大寫“M”開頭的行
[root@localhost home]# grep "^a" test.txt
a
aa
aaa
aaaa
aaaaa
ab
aabb
“n$”:匹配以小寫“n”結尾的行
[root@localhost home]# grep "b$" test.txt
ab
aabb
b
bb
bbb
bbbb
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
a
aa
aaa
aaaa
aaaaa
ab
aabb
b
bb
bbb
bbbb
bbbb
said
soid
sdkdkdkd
jladf8002378
ladfjadf7
“[a-z]$”:匹配用小寫字母結尾的行
[root@localhost home]# grep "[a-z]$" test.txt
a
aa
aaa
aaaa
aaaaa
ab
aabb
b
bb
bbb
bbbb
bbbb
said
soid
sdkdkdkd
[root@localhost home]# grep "^[a-z]$" test.txt
a
b
[root@localhost home]# grep "^[a-z][a-z]$" test.txt
aa
ab
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\}”:表示其前面的字符恰好出現n次
“a\{3\}”:匹配a字母連續出現三次的字符串。
注意:至少重複3次,匹配出來的結果顯示超過3個字符串也會顯示到結果中
[root@localhost home]# grep "a\{3\}" test.txt
aaa
aaaa
aaaaa
“[0-9]\{3\}”:匹配包括連續的三個數字的字符串
要想準確查找,需要加定界符