Shell 脚本
正则表达式
正则表达式分为基础正则表达式与扩展正则表达式,它不是一个工具程序,而是一个字符串处理的标准依据,是使用单个字符串搜索、匹配一系列符合某个语法规则的字符串。
正则表达式的定义
- 正则表达式又称为正规表达式 、常规表达式
- 使用字符串来描述、匹配一系列符合某个规则的字符串
- 正则表达式的组成:
- 普通字符:大小写字母、数字、标点符号及一些其他符号
- 元字符:在正则表达式中具有特殊意义的专用字符 - 支持使用正则表达式的工具:
- vi 编辑器 :支持基础正则表达式;不支持扩展正则表达式
- grep :支持基础正则表达式;不支持扩展正则表达式
- egrep :支持基础正则表达式;支持扩展正则表达式
- sed :支持基础正则表达式;不支持扩展正则表达式
- awk :支持基础正则表达式;支持扩展正则表达式
基础正则表达式
- 基础正则表达式是常用的正则表达式部分
- 除了普通字符外,常见的元字符:
元字符 | 作用 |
---|---|
\ | 转义字符,用于取消特殊符号的含义; 例如:\!、\n |
^ | 匹配字符的开始位置; 例如:^word 匹配以word 开头的行 |
$ | 匹配字符的结束位置; 例如:word$ 匹配以word 结尾的行 |
. | 匹配除\n(换行)之外的任意一个字符 |
* | 匹配前面的子表达式0次或者多次 |
[list] | 匹配list列表中的一个字符; 例如:[0-9]匹配任一位数字 |
[^list] | 匹配不在 list 列表中的一个字符; 例如: [^0-9]匹配任意一位非数字字符 |
\ {n\ } | 匹配前面的子表达式n次; 例如:[0-9]\ {2\ }匹配两位数字 |
\ {n,\ } | 匹配钱面的子表达式不少于n次; 例如: [0-9]\ {2,\ }表示两位及两位以上数字 |
\ {n,m\ } | 匹配前面的子表达式n到m次; 例如: [a-z]\ {2,3\ }匹配两到三位的小写字母 |
[] | 字符集合;匹配所包含的任意字符; 例如:"[abc]“可以匹配“[abc]”中的"a” |
[n1-n2] | 字符范围;匹配未包含的任意字符 |
以 grep 工具,/etc/passwd 文件为例,举些示例:
grep root /etc/passed :筛选文件中包含root的行grep ^root /etc/passwd :筛选出以root开头的行grep bash$ /etc/passwd :筛选出以bash结尾的行grep -v root /etc/passwd :筛选文件中不包含root的行grep 'r..d' /etc/passwd :筛选出 r 和 d 之间有两个字符的行grep '[^s]bin' /etc/passwd :筛选 bin 前面不是 s 的行grep “^$” /etc/passwd :筛选出空白行,没有空白行的所以没输出grep 't[es]' /etc/passwd :筛选包含字符串 te 或 ts 的行grep '0\ {1,\}' /etc/passwd :查找数字 0 出现1次以上grep -e "ntp" -e "root" /etc/passwd :-e 参数查找多个模式
“*” 在通配符中表示任意字符。而在正则表达式中表示匹配前面的子表达式0次或者多次
grep 0* /etc/passwd :这里的0*会匹配所有内容(若是有空白行的文件,甚至包括空白行)
grep 00* /etc/passwd :这里的00* 匹配至少包含一个 0 的行(第一个 0 必须出现,第二个0可以出现0次或者多次)
扩展正则表达式
- 扩展正则表达式是对基础正则表达式分扩充深化
- 常见的元字符
元字符 | 作用 |
---|---|
+ | 重复一个或者一个以上的前一个字符 |
? | 0个或者一个的前一个字符 |
管道符号 | 使用或者(or)的方式找出多个字符 |
() | 查找“组”字符 |
()+ | 辨别多个重复的组 |
以 egrep 工具,/etc/passwd 文件为例,举些示例:
egrep 0+ /etc/passwd :匹配至少一个 0 的行egrep '(root|ntp)' /etc/passwd :匹配包含 root 或 ntp 的行egrep ro?t /etc/passwd :匹配 rt 或者 rot 的行egrep -v '^$|^#' /etc/passed :过滤文件中的空白行与 # 开头的行,没有空白行与 # 号开头的行,所以没有任何输出
Shell 脚本
正则表达式
正则表达式分为基础正则表达式与扩展正则表达式,它不是一个工具程序,而是一个字符串处理的标准依据,是使用单个字符串搜索、匹配一系列符合某个语法规则的字符串。
正则表达式的定义
- 正则表达式又称为正规表达式 、常规表达式
- 使用字符串来描述、匹配一系列符合某个规则的字符串
- 正则表达式的组成:
- 普通字符:大小写字母、数字、标点符号及一些其他符号
- 元字符:在正则表达式中具有特殊意义的专用字符 - 支持使用正则表达式的工具:
- vi 编辑器 :支持基础正则表达式;不支持扩展正则表达式
- grep :支持基础正则表达式;不支持扩展正则表达式
- egrep :支持基础正则表达式;支持扩展正则表达式
- sed :支持基础正则表达式;不支持扩展正则表达式
- awk :支持基础正则表达式;支持扩展正则表达式
基础正则表达式
- 基础正则表达式是常用的正则表达式部分
- 除了普通字符外,常见的元字符:
元字符 | 作用 |
---|---|
\ | 转义字符,用于取消特殊符号的含义; 例如:\!、\n |
^ | 匹配字符的开始位置; 例如:^word 匹配以word 开头的行 |
$ | 匹配字符的结束位置; 例如:word$ 匹配以word 结尾的行 |
. | 匹配除\n(换行)之外的任意一个字符 |
* | 匹配前面的子表达式0次或者多次 |
[list] | 匹配list列表中的一个字符; 例如:[0-9]匹配任一位数字 |
[^list] | 匹配不在 list 列表中的一个字符; 例如: [^0-9]匹配任意一位非数字字符 |
\ {n\ } | 匹配前面的子表达式n次; 例如:[0-9]\ {2\ }匹配两位数字 |
\ {n,\ } | 匹配钱面的子表达式不少于n次; 例如: [0-9]\ {2,\ }表示两位及两位以上数字 |
\ {n,m\ } | 匹配前面的子表达式n到m次; 例如: [a-z]\ {2,3\ }匹配两到三位的小写字母 |
[] | 字符集合;匹配所包含的任意字符; 例如:"[abc]“可以匹配“[abc]”中的"a” |
[n1-n2] | 字符范围;匹配未包含的任意字符 |
以 grep 工具,/etc/passwd 文件为例,举些示例:
grep root /etc/passed :筛选文件中包含root的行grep ^root /etc/passwd :筛选出以root开头的行grep bash$ /etc/passwd :筛选出以bash结尾的行grep -v root /etc/passwd :筛选文件中不包含root的行grep 'r..d' /etc/passwd :筛选出 r 和 d 之间有两个字符的行grep '[^s]bin' /etc/passwd :筛选 bin 前面不是 s 的行grep “^$” /etc/passwd :筛选出空白行,没有空白行的所以没输出grep 't[es]' /etc/passwd :筛选包含字符串 te 或 ts 的行grep '0\ {1,\}' /etc/passwd :查找数字 0 出现1次以上grep -e "ntp" -e "root" /etc/passwd :-e 参数查找多个模式
“*” 在通配符中表示任意字符。而在正则表达式中表示匹配前面的子表达式0次或者多次
grep 0* /etc/passwd :这里的0*会匹配所有内容(若是有空白行的文件,甚至包括空白行)
grep 00* /etc/passwd :这里的00* 匹配至少包含一个 0 的行(第一个 0 必须出现,第二个0可以出现0次或者多次)
扩展正则表达式
- 扩展正则表达式是对基础正则表达式分扩充深化
- 常见的元字符
元字符 | 作用 |
---|---|
+ | 重复一个或者一个以上的前一个字符 |
? | 0个或者一个的前一个字符 |
管道符号 | 使用或者(or)的方式找出多个字符 |
() | 查找“组”字符 |
()+ | 辨别多个重复的组 |
以 egrep 工具,/etc/passwd 文件为例,举些示例:
egrep 0+ /etc/passwd :匹配至少一个 0 的行egrep '(root|ntp)' /etc/passwd :匹配包含 root 或 ntp 的行egrep ro?t /etc/passwd :匹配 rt 或者 rot 的行egrep -v '^$|^#' /etc/passed :过滤文件中的空白行与 # 开头的行,没有空白行与 # 号开头的行,所以没有任何输出