1.1 正则表达式,区分大小写
$ echo "This is a test" | sed -n '/this/p' 将不会有输出
----
$ echo "This is a test" | sed -n '/This/p'
This is a test
1.2 正则表达式,不用将单词完整写出
$ echo "The books are expensive" | sed -n '/book/p'
The books are expensive
1.3 空格在正则表达式中是一样的,没有其他区别。 “ber 1” 匹配“number 1”
$ echo "This is line number 1" | sed -n '/ber 1/p'
This is line number 1
1.4
在正则文本模式中不能单独使用 特殊字符(共计11个)
. * []^ $ {} \ + ? | () ".*[]^$\" 属于基础正则表达式BRE “{}+?|()”属于扩展正则表达式 ERE(某些不会支持)
要使用需要使用转义符 通常是 加上反斜杠 \. "\?" "\$" "\\" 斜杠最好也做转义处理 "\/"
1.4.1 “.”匹配除换行符之外的任意单个字符
可以匹配空格,但必须要占一个字符
![](https://i-blog.csdnimg.cn/blog_migrate/9b57c9d6905127c0bbbe047787eb1ff5.png)
1.4.2“[]”字符组
"[ch]at"只匹配 cat、hat。
![](https://i-blog.csdnimg.cn/blog_migrate/8f388386215a74e8236e23f6e74b29b1.png)
忽略大小写
$ echo "yEs" | sed -n '/[Yy][Ee][Ss]/p'
yEs
"[^]"排除型字符组(取反) ,但以at开头的无法匹配,因为字符组仍要占一个字符
![](https://i-blog.csdnimg.cn/blog_migrate/85b66dc63bd5f9e62362308efa423675.png)
字符组区间 ,[0-9] 任意数字。 区间采用 系统采用的字符集。
“[a-ch-m0-9]”匹配 a-c 或 h-m 或 0-9 的字符
![](https://i-blog.csdnimg.cn/blog_migrate/7d8ceec01e8892fecaf42b71a4af0fa6.png)
1.4.3 "*" 匹配0个或多个特定字符
i3*k 匹配了0个或多个3
![](https://i-blog.csdnimg.cn/blog_migrate/ec3411d9b31aad29f49fb7b0b0f2e50b.png)
配合上字符组
![](https://i-blog.csdnimg.cn/blog_migrate/384225eca402a36d5b9f310c41d77cf9.png)
1.4.4 特殊字符(估计能用到的场合比较特殊)
组
|
描 述
|
[[:alpha:]]
|
匹配任意字母字符,不管是大写还是小写
|
[[:alnum:]]
|
匹配任意字母数字字符0~9、 A~Z或a~z
|
[[:blank:]]
|
匹配空格或制表符
|
[[:digit:]]
|
匹配0~9之间的数字
|
[[:lower:]]
|
匹配小写字母字符a~z
|
[[:print:]]
|
匹配任意可打印字符
|
[[:punct:]]
|
匹配标点符号
|
[[:space:]]
|
匹配任意空白字符:空格、制表符、 NL、 FF、 VT和CR
|
[[:upper:]]
|
匹配任意大写字母字符A~Z
|
1.5 锚字符(已***开头、已***结尾) 因为,正则本来是匹配数据流的任意地方
1.5.1“^” 锁定行首
![](https://i-blog.csdnimg.cn/blog_migrate/39607eafb6f087f750d89dafd38aa4e7.png)
如果将该符号放到其他地方,他就是普通字符
$ echo "This ^ is a test" | sed -n '/his ^/p'
This ^ is a test
1.5.2 $”锁定行尾
![](https://i-blog.csdnimg.cn/blog_migrate/515cca799ca10e2f9362ac28d0a01c38.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3c04b83bf12a82bd2168c921d7b386e1.png)
1.5.3 组合锚点
过滤掉空行
![](https://i-blog.csdnimg.cn/blog_migrate/777a6ecc10baa2b270eeb1494aa16637.png)
1.6 扩展正则表达式
“{}+?|()”属于扩展正则表达式
ERE(某些不会支持,比如sed)
1.6.1“?”匹配出现0-1次的字符
![](https://i-blog.csdnimg.cn/blog_migrate/2d874bd83063f50791f159a8ab167b7f.png)
1.6.2“+”匹配出现1-n次的字符,该字符未出现,则匹配失败
![](https://i-blog.csdnimg.cn/blog_migrate/d3c156c2e1178f02866ea9a627b516d0.png)
1.6.3“{}” 为可重复的正则表达式指定一个上限,称为间隔(interval)
{3} 某字符出现3次, {2,4}某字符出现2-4次
为了识别正则表达式间隔,awk指定 --re- interval 命令
![](https://i-blog.csdnimg.cn/blog_migrate/c4807d6a9801a9d3eda40cbf8b2d5792.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e5d0cee4f283bc6be973fce709e3e495.png)
1.6.4“|”或运算,满足任意一个即可匹配
格式如下: 【expr1】|【expr2|】 awk '/[0-9]|ab/{print $0}' 匹配0-9数字或 ab的字符
1.6.5“()”表达式分组,其内容结果相当于字符串
![](https://i-blog.csdnimg.cn/blog_migrate/f03128000696f3ced4c154e29358d72e.png)