通过 Shell 脚本应用 (一) https://blog.51cto.com/14157628/2424064 ,Shell 脚本应用 (二) https://blog.51cto.com/14157628/2424803 ,Shell 脚本应用 (三) https://blog.51cto.com/14157628/2425554 这几篇博文, 我们已经掌握了 Shell 脚本的编写规则和各种语句的具体应用, 但是实际生产环境中, Shell 脚本通常与正则表达式, 文本处理工具结合使用. 我们就来认识一下 "正则表达式 (RE)".
正则表达式概述
1. 正则表达式的定义
正则表达式又称正规表达式, 常规表达式. 在代码中常简写为 regex,regexp 或 RE. 正则表达式是使用单个字符串来描述, 匹配一系列符合某个句法规则的字符串. 简单的说, 正则表达式是一种匹配字符串的方法, 通过一些特殊符号, 实现快速查找, 删除, 替换某个特定字符串.
正则表达式作为一个模板, 将某个字符模式与所搜索的字符串相匹配. 其中由两部分组成:
1. 普通字符: 包括大小写字母, 数字, 标点符号及一些其他符号;
2. 元符号: 是指那些在正则表达式中具有特殊意义的专用字符.
正则表达式一般用于脚本编程与文本编辑器. 很多文本处理器与程序设计语言均支持正则表达式. 正则表达式具备很强大的文本匹配功能, 能够在文本海洋中快速高效地处理文本.
2. 正则表达式用途
正则表达式对于系统管理员来说是非常重要的, 系统运行过程中会产生大量的信息, 这些信息中有些是非常重要的, 有些仅仅是高中的信息. 身为系统管理员如果直接查看这么多的信息数据, 无法快速定位到非常重要的信息. 如 "用户账号登录失败","服务启动失败" 等重要信息. 这是便可以通过正则表达式快速提取 "有问题" 的信息, 如此一来, 可以将运维工作变得更加简单, 方便.
目前很多软件也支持正则表达式, 最常见的就是邮件服务器. 在 Internet 中, 垃圾广告, 邮件等将会造成网络塞车, 如果在服务器端将这些问题提前剔除的话, 客户端就会减少很多不必要的带宽消耗.
正则表达式的字符串根据不同的严谨程度与功能分为:
1. 基本正则表达式;
2. 扩展正则表达式.
一, 基础正则表达式
在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式, 基础正则表达式以 grep 命令为例
基础正则表达式示例:
1) 查找包含 "the" 的行
[[email protected] ~]# grep -n 'the' test.txt
grep 命令的选项有:
* -n: 表示显示行号;
* -i: 表示不区分大小写;
* -v: 表示反向查找.
2) 查找不包含 "the" 的行
[[email protected] ~]# grep -vn 'the' test.txt
3) 查找以 sh 开头, 以 rt 结尾, 中间是 i 或 o 的字符
[[email protected] ~]# grep -n 'sh[io]rt' test.txt
4) 查询 oo 前面不是 w 的字符串
[[email protected] ~]# grep -n '[^w]oo' test.txt
5) 查询 oo 前面不是小写字母的字符串
[[email protected] ~]# grep -n '[^a-z]oo' test.txt
6)^ 匹配以某个字符开头的行. 查询以 the 开头的字符串
[[email protected] ~]# grep -n '^the' test.txt
7)[^] 匹配未包含的一个任意字符. 查询不以字母开头的字符串
[[email protected] ~]# grep -n '^[^a-zA-Z]' test.txt
8)$ 匹配以某个字符结尾的行. 查询以. 结尾的字符串
- [[email protected] ~]# grep -n '\.$' test.txt
- // 其中小数点 "." 具有特殊意义, 所以需要使用转义字符 "\" 将具有特殊意义的字符转化为普通字符
9)"." 匹配除 \ r\n 外的任意一个字符. 查询 w 与 d 之间包含两个字符的行
[[email protected] ~]# grep -n 'w..d' test.txt
10) 查询包含连续 o 字母的行
- [[email protected] ~]# grep -n 'ooo*' test.txt
- //"*" 表示的是重复零个或多个前面的单字符
11) 查询以 w 开头以 d 结尾中间至少包含一个 o 的行
[[email protected] ~]# grep -n 'woo*d' test.txt
12) 查询以 w 开头 d 结尾, 中间的字符可有可无的行
[[email protected] ~]# grep -n 'w.*d' test.txt
13){n} 匹配确定的 n 次. 查询包含两个 o 的行
- [[email protected] ~]# grep -n 'o\{2\}' test.txt
- //"{}" 是特殊字符需要用 "\" 转义
14) 查询以 w 开头 d 结尾, 中间包含 2~5 个 o 的行
- [[email protected] ~]# grep -n 'wo\{2,5\}' test.txt
- // {
- n,m
- } 最少匹配 n 次且最多 m 次
15) 查询以 w 开头以 d 结尾, 中间包含 2 个以上 o 的行
- [[email protected] ~]# grep -n 'wo\{2,\}' test.txt
- // {
- n,
- } 至少匹配 n 次
基础正则表达式常见元字符总结
二, 扩展正则表达式
通常情况下会使用基础正则表达式就已经足够了, 但是为了简化整个指令, 需要使用范围更广的扩展正则表达式.
在 Linux 系统常见的文本处理工具中 egrep 与 awk 支持扩展正则表达式, egrep 命令与 grep 命令的用法基本相似.
扩展正则表达式常见元字符总结
正则表达式就简单介绍这么多, 等以后有需要了, 会实时更新的!
来源: http://www.bubuko.com/infodetail-3141913.html