安全基础 --- 正则表达式
正则表达式是表达文本模式的方法
正则表达式(Regular Expression),简称为正则或Regex,是一个用来描述、匹配和操作字符串的工具。
(1)限定字符
限定字符多用于重复匹配次数
常用限定字符:
语法 | 说明 |
|
上一项是可选的,最多匹配一次。 |
* |
前一项将被匹配零次或多次。 |
+ |
前一项将被匹配一次或多次。 |
{N} |
上一项完全匹配N次。 |
{N,} |
前一项匹配N次或多次。 |
{N,M} |
前一项至少匹配N次,但不超过M次。 |
(2)元字符
元字符
是表示特殊函数的字符,包括以下这些^ $ . [ ] { } - ? * + ( ) | \
常用元字符:
语法 | 说明 |
. |
匹配任何单个字符。 |
^ | 匹配行首的空字符串;也代表不在列表范围内的字符 |
$ | 匹配文本行结尾 |
b | 匹配单词的开始或结束(单词边缘的空字符串) |
w | 匹配字母或数字或下划线或汉字 |
s | 匹配任意空白符 |
d | 匹配一个数字字符。等价于[0-9]。 |
grep -h '.zip' test.txt
在文件中查找包含正则表达式“.zip”的文本行
grep -h '^zip' test.txt
grep -h 'zip$' test.txt
分别在文件中搜索行首和行尾包含“zip”的文本行
(3)反义字符
语法 | 说明 |
B | 匹配不是单词开头或结束的位置 |
D | 匹配一个非数字字符。 |
S | 匹配任何可见字符。 |
W | 匹配任何非单词字符。 |
(4)字符类
方括号之中的字符,表示可以任意匹配其中的一个。
语法 | 说明 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
grep -h '[bg]zip' test.txt
匹配包含字符串“bzip”或者“gzip”的任意行
grep -h '[^bg]zip' test.txt
匹配不以'b'或'g'开头的行
-在方括号中表示一个字符区域
grep -h '^[A-Z]' test.txt
匹配以大写字母开头的行
grep -h '[-AZ]' test.txt
匹配以连字符,或大写A,或大写Z开头的行
(5)预定义字符类
-
[:alnum:]
字母数字字符。在 ASCII 中,等价于:[A-Za-z0-9]
-
[:word:]
与[:alnum:]
相同, 但增加了下划线字符。 -
[:alpha:]
字母字符。在 ASCII 中,等价于[A-Za-z]
-
[:blank:]
包含空格和 tab 字符。 -
[:cntrl:]
ASCII 的控制码。包含了0到31,和127的 ASCII 字符。 -
[:digit:]
数字0到9 -
[:graph:]
可视字符。在 ASCII 中,它包含33到126的字符。 -
[:lower:]
小写字母。 -
[:punct:]
标点符号字符。 -
[:print:]
可打印的字符。等于[:graph:]
中的所有字符,再加上空格字符。 -
[:space:]
空白字符,包括空格,tab,回车,换行,vertical tab, 和 form feed.在 ASCII 中, 等价于[trnvf]
-
[:upper:]
大写字母。 -
[:xdigit:]
用来表示十六进制数字的字符。在 ASCII 中,等价于[0-9A-Fa-f]
(6)选择
|
表示匹配一系列字符串之中的一个。
echo "AAA" | grep -E 'AAA|BBB'
AAA
echo "BBB" | grep -E 'AAA|BBB'
BBB
'AAA|BBB'表示匹配字符串'AAA'或者是字符串'BBB'
echo "CCC" | grep -E 'AAA|BBB'
grep
程序使用-E
参数,表示按照正则表达式规则匹配。并且,这个正则表达式放在单引号之中,为的是阻止Shell把|
解释为管道操作符。
|
可以多个连用,也可以与其他正则规则结合使用。
echo "AAA" | grep -E 'AAA|BBB|CCC'
AAA
grep -Eh '^(bz|gz|zip)' test.txt
附:
-
--
:表示范围,如果它不是列表中的第一个或最后一个,也不是列表中某个范围的终点。 -
<
:匹配单词开头的空字符串。 -
>
:匹配单词末尾的空字符串。
f | 匹配一个换页符。 |
n | 匹配一个换行符。 |
r | 匹配一个回车符。 |
t | 匹配一个制表符。 |
v | 匹配一个垂直制表符。 |