文章目录
正则表达式类型
- 基本政策表达式引擎(BRE)
- 扩展正则表达式引擎(ERE)
特殊字符
.
*
[]
$
{}
\
+
?
|
()
锚字符
锁定在行首
^
定义从数据流中文本行的行首开始的模式。如果模式位于其他位置而不是文本行的行首,正则表达式模式不会成立。
echo "this is a book" | sed -n '/^book/p' # 不会打印任何
锁定在行尾
$
指明数据化必须以该文本模式结尾
echo "this is a good book" | sed -n '/book$/p' #可以打印出~
组合锚点
^$
sed '/^$/d' test1
#两个锚点组合到一起,不加任何文本,可以过滤掉数据流中的空白行。
点字符 .
- 点字符用来匹配任意的单字符,除了换行符!!!但必须匹配一个。
- 注意:空格在正则表达式中会被认为是一个字符!!!
sed -n '/.at/p' test2
字符组 [ ]
- [ ] - 包含要匹配的字符,不确定大小写的时候可以使用,很方便。
- 常见用法:解析拼错的单词,如用户表单输入的数据。可以创建正则表达式来接受数据中常见的拼写错误。
sed -n '/[ch]at/p' test3
排除字符组
在字符组的开头加一个脱字符 ^
sed -n '[^ch]at' test4
特殊字符组
字符组 | 描述 |
---|---|
[[:alpha:]] | 匹配任意字母字符,不管大写小写 |
[[:alnum:]] | 匹配任意字母数字字符,0-9,a-z,A-Z |
[[:blank:]] | 匹配任意空格或制表符 |
[[:digit:]] | 匹配0-9 |
[[:lower:]] | 匹配小写字母数字字符,a-z |
[[:upper:]] | 匹配大写字母数字字符,A-Z |
[[:print:]] | 匹配任意可打印字符 |
[[:punct:]] | 匹配标点符号 |
[[:space:]] | 匹配任意空白字符:空格、制表符、NL、FF、VT 和 CR |
星号 *
*
表明字母可能出现或不出现在匹配模式的文本中。
$ echo "this is a regular pattern expression" | sed -n '/regular.*expression/p'
this is a regular pattern expression
扩展正则表达式 只能gawk使用
问号 ?
- 问号表明前面的字符可以出现0次或1次,但只限于此。不会匹配多次出现的字符;
- 如果字符组中的字符出现了0次或1次,模式匹配就成立,如果都出现了,或者同一个出现了两次及以上,模式匹配不成立。
$ echo "bt" | gawk '/b[ae]?t/{print $0}' #输出 bt
$ echo "bat" | gawk '/b[ae]?t/{print $0}' #输出 bat
$ echo "baet" | gawk '/b[ae]?t/{print $0}' #输出为空
加号 +
(1)可以出现1次或多次,至少出现一次。
$ echo "beeet" | gawk '/be+t/{print $0}' #输出beeet
$ echo "bt" | gawk '/be+t/{print $0}' #输出为空
使用花括号 { }
- 为可重复的正则表达式指定一个上限,称为 区间
m
- 正则表达式准确出现m次m,n
- 正则表达式最少出现m次,最多出现n次
$ echo "bt" | gawk --re-interval '/be{1}t/{print $0}' #输出为空
管道符号 |
- 如果任何一个模式匹配了文本数据流,文本就通过。
- 正则表达式和管道符号之间不能有空格。
$ echo "the cat is asleep" | gawk '/cat|dog/{print $0}'
聚合表达式
正则表达式模式也可以用圆括号聚合起来。
当你使用聚合正则表达式模式时,该组就会被当成标准字符。
$ echo "Sat | gawk '/Sat(urday)?/{print $0}'"
Sat
$ echo "Saturday | gawk '/Sat(urday)?/{print $0}'"
Saturday