正则表达式与通配符

grep、awk、sed等命令可以支持正则表达式。

表达式 含义
* 前一个字符匹配0次或任意多次。
. 匹配除了换行符外任意一个字符。
^ 匹配行首。 例如: ^hello会匹配以hello开头的行。
$ 匹配行尾。 例如: hello$ 会匹配以hello结尾的行。
[] 匹配中括号中指定的任意一个字符, 只匹配一个字符。例如: [aoeiu] 匹配任意一个元音字母, [0-9] 匹配任意一位数字, [a-z][0-9]匹配小写字和一位数字构成的两位字符。
[^] 匹配除中括号的字符以外的任意一个字符。 例如: [^0-9] 匹配任意一位非数字字符, [^a-z] 表示任意一位非小写字母。
\ 转义符。 用于取消讲特殊符号的含义取消。
\{n\} 表示其前面的字符恰好出现n次。 例如: [0-9]\{4\} 匹配4位数字, [1][3-8][0-9]{9} 匹配手机号码。
\{n,\} 表示其前面的字符出现不小于n次。 例如: [0-9]\{2,\} 表示两位及以上的数字。
\{n,m\} 表示其前面的字符至少出现n次, 最多出现m次。 例如: [az]\{6,8\} 匹配6到8位的小写字母。
* 匹配任意字符

[admin@host ~]$ cat test_rule.txt
abc
bcd
cde
def
aahh
aaahhh
cbda
cbdaa

[admin@host ~]$ grep "a*" test_rule.txt
abc
bcd
cde
def
aahh
aaahhh
cbda
cbdaa

[admin@host ~]$ grep "aa*" test_rule.txt
abc
aahh
aaahhh
cbda
cbdaa

[admin@host ~]$ grep "aaa*" test_rule.txt
aahh
aaahhh
cbdaa

[admin@host ~]$ grep "aaaa*" test_rule.txt
aaahhh

[admin@host ~]$ grep "aaaaa*" test_rule.txt
. 匹配除了换行符外任意一个字符

[admin@host ~]$ grep "c..a" test_rule.txt
cbda
cbdaa

[admin@host ~]$ grep "e.f" test_rule.txt
[admin@host ~]$ grep "e.*f" test_rule.txt
def
注意这里的结果是空的

[admin@host ~]$ grep "*" test_rule.txt
*要依赖于其他字符,其他字符出现0次或多次

[admin@host ~]$ grep ".*" test_rule.txt
abc
bcd
cde
def
aahh
aaahhh
cbda
cbdaa
^ 行首 $ 行尾

匹配以a开头的行

[admin@host ~]$ grep "^a" test_rule.txt
abc
aahh
aaahhh

匹配以h结尾的行

[admin@host ~]$ grep "h$" test_rule.txt
aahh
aaahhh

匹配空白行

[admin@host ~]$ cat test_rule.txt
abc
bcd
cde
def
aahh
aaahhh
cbda
cbdaa

[admin@host ~]$ grep "^$" test_rule.txt
[]

[admin@host ~]$ grep "c[df]e" test_rule.txt
cde

[admin@host ~]$ grep "c[a-z]e" test_rule.txt
cde

匹配以b或者c开头的行

[admin@host ~]$ grep "^[bc]" test_rule.txt
bcd
cde
cbda
cbdaa

匹配不是a或者b开头的行

[admin@host ~]$ grep "^[^ab]" test_rule.txt
cde
def
cbda
cbdaa

匹配不用字母开头的行

[admin@host ~]$ grep "^[^a-zA-Z]" test_rule.txt
\ 转义

[admin@host ~]$ cat test_rule.txt
abc.
de
fg

匹配以.结尾的行

[admin@host ~]$ grep "\.$" test_rule.txt
abc.
\{n\} 表示前面的字符恰好出现n次

[admin@host ~]$ cat test_rule.txt
abbbbbc.
de
fg

匹配连续出现5次b的行

[admin@host ~]$ grep "b\{5\}" test_rule.txt
abbbbbc.

[admin@host ~]$ cat test_rule.txt
abbbbbc.
de
f
g
h12345

匹配连续出现5个数字的行

[admin@host ~]$ grep "[0-9]\{5\}" test_rule.txt
h12345
\{n,\} 表示前面的字符出现不小于n次

[admin@host ~]$ cat test_rule.txt
abbbbbc.
de
f
g
12345jin

匹配最少以5个数字开头的行

[admin@host ~]$ grep "^[0-9]\{5,\}[a-z]" test_rule.txt
12345jin

[admin@host ~]$ grep "^[0-9]\{6,\}[a-z]" test_rule.txt
[admin@host ~]$
\{n,m\} 表示前面的字符最少出现n次,最多出现m次

[admin@host ~]$ cat test_rule.txt
sai
saai
saaai
saaaai
saaaaai
[admin@host ~]$ grep "sa\{1,2\}i" test_rule.txt
sai
saai

[admin@host ~]$ grep "sa\{1,5\}i" test_rule.txt
sai
saai
saaai
saaaai
saaaaai

[admin@host ~]$ grep "sa\{3,5\}i" test_rule.txt
saaai
saaaai
saaaaai

你可能感兴趣的:(正则表达式)