SHELL脚本学习(十一)正则表达式

一、锚点字符
1.1 锚点行首

脱字符(^)指出行首位置

shell 复制代码
$ cat < file1
test line1
test line2
test line3
line4 test

#打印所有包括文本 test的行
$ sed -n '/test/p' file1
test line1
test line2
test line3
line4 test

#打印所有以test为首的行
$ sed -n '/^test/p' file1
test line1
test line2
test line3
1.2 锚点行尾

美元符号($)指出行尾位置

shell 复制代码
$ cat < file1
test line1
test line2
test line3
line4 test

#打印所有以test结尾的行
$ sed -n '/test$/p' file1
line4 test
二、点字符

点字符(.)能够匹配除换行符之外的所有字符。

shell 复制代码
$ cat<file
cat
hat
 at
a t

$ sed -n '/.at/p' file
cat
hat
 at

空格也是一个字符

三、字符组

方括号 [] 用于定义字符组,字符组内的任一字符匹配,即为匹配。

shell 复制代码
$ cat<file
cat
hat
 at
a t
ubuntu@VM-8-14-ubuntu:~$ sed -n '/[ch]at/p' file
cat
hat
四、排除型字符组

在字符组前加上脱字符即为排除型字符组。排除型字符组的语义正好和字符组相反,不匹配字符组内的任一字符。

shell 复制代码
$ cat<file
cat
hat
 at
a t

$ sed -n '/[^ch]at/p' file
 at
五、区间

可以单连字符(-)表示区间。即 起始字符-结束字符。

shell 复制代码
$ sed -n '/[A-Z][Aa][Tt]/p' file
HAT
CAT

$ sed -n '/[a-z][Aa][Tt]/p' file
cat
hat

A-Z 表示 当前字符 要匹配单个 大写字母

a-z 表示 当前字符 要匹配单个 小写字母

六、特殊字符

除了定义自己的字符组,BRE(basic regular expression 基础正则表达式)还提供了一些特殊字符组。
BRE特殊字符组

字符组 描述
[[ :alpha:]] 匹配任意字符字符,a-z A-Z
[[:alnum:]] 匹配任意字母数字,z-a A-Z 0-9
[[:blank:]] 匹配空格或制表符
[[:digit:]] 匹配0-9中的数字
[[:lower:]] 匹配小写字母 a-z
[[:print:]] 匹配任意可打印字符
[[:punct:]] 匹配标点符号
[[:space:]] 匹配任意空白符。空格、制表符、换行符、回车等。。。
[[:upper:]] 匹配任意大写字母 A-Z

特殊字符组的使用方式和普通字符组一样。

shell 复制代码
$ cat <file
cat
hat
 at
a t
HAT
CAT

$ sed -n '/[[:upper:]][Aa][Tt]/p' file
HAT
CAT

$ sed -n '/[[:lower:]][Aa][Tt]/p' file
cat
hat
七、星号 *

在字符后面加 星号*,表示该字符必须匹配0次或多次。

shell 复制代码
$ echo "hello" | sed -n '/hel*o/p'
hello
$ echo "heo" | sed -n '/hel*o/p'
heo
$ echo "heto" | sed -n '/hel*o/p'
$ 
相关推荐
leoufung7 分钟前
vim 多个关键字高亮插件介绍
linux·编辑器·vim
Karoku0661 小时前
【CI/CD】CI/CD环境搭建流程和持续集成环境配置
运维·ci/cd·docker·容器·kubernetes·prometheus
Nerd Nirvana3 小时前
软考—系统架构设计(案例 | 论文)
linux·系统架构·软件工程·软考·计算机基础
StickToForever3 小时前
第4章 信息系统架构(五)
经验分享·笔记·学习·职场和发展
勤奋的凯尔森同学4 小时前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
丁卯4045 小时前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
chengooooooo5 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
人间打气筒(Ada)7 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231117 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
Moonnnn.7 小时前
51单片机学习——动态数码管显示
笔记·嵌入式硬件·学习·51单片机