Shell 正则表达式详解
Shell 正则表达式
什么是正则表达式?
正则表达式在每种语言中都会有,功能就是匹配符合你预期要求的字符串。
为什么要学正则表达式?
在企业工作中,我们每天做的linux运维工作中,时刻都会面对大量带有字符串的文本配置、程序、命令输出及日志文件等,而我们经常会有迫切的需要,从大量的字符串内容中查找符合工作需要的特定的字符串。这就要靠正则表达式。因此,可以说正则表达式就是为过滤字符的需求而生的!
例如:ifconfig的输出取IP,例如:cat /var/log/messages输出等
两个注意事项:
- 正则表达式应用非常广泛,存在于各种语言中,例如:php、python、java等。但是我们今天讲的linux系统运维工作中的正则表达式,即linux正则表达式,最常用正则表达式的命令就是grep(egrep)、sed、awk,换句话说linux四剑客剑客要想工作的各高效,那一定离不开正则表达式配合的。
- 正则表达式和我们常用的通配符特殊字符是用本质去别的,这一点要注意。通配符例子:ls .log**这里的就是通配符(表示所有),不是正则表达式
Shell 正则表达式分为两种:
- 基础正则表达式:BRE(basic regular express)
- 扩展正则表达式:ERE(extend regular express),扩展的表达式有+、?、|和()
下面是一些常用的正则表达式符号
| 正则表达式 | 描述 |
|---|---|
| \ | 转义符,将特殊字符进行转义,忽略其特殊意义 |
| ^ | 匹配行首,awk中,^则是匹配字符串的开始 |
| $ | 匹配行尾,awk中,$则是匹配字符串的结尾 |
| . | 匹配除换行符\n之外的任意单个字符,awk则中可以 |
| [] | 匹配包含在[字符]之中的任意一个字符 |
| [^ ] | 匹配[^字符]之外的任意一个字符 |
| [] | 匹配不是中括号内任意一个字符开头的行 |
| [ - ] | 匹配[]中指定范围内的任意一个字符,要写成递增 |
| ? | 匹配之前的项1次或者0次 |
| + | 匹配之前的项1次或者多次 |
| * | 匹配之前的项0次或者多次 |
| () | 匹配表达式,创建一个用于匹配的子串 |
| { n } | 匹配之前的项n次,n是可以为0的正整数 |
| {n,} | 之前的项至少需要匹配n次 |
| {n,m} | 指定之前的项至少匹配n次,最多匹配m次,n<=m |
| | | 交替匹配|两边的任意一项 |
| < | 边界符,匹配字符串开始 |
| > | 边界符,匹配字符串结束 |
基本正则表达式实践
接下来的测试文本如下:
[root@localhost ~]# cat test.log
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges –notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges –emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end...
=========================
以下实践通过grep 命令增加正则表达式进行匹配练习
^(尖角号)功能实践
# 匹配首字母为%的行
[root@localhost ~]# grep -n "^%" test.log
# -n 参数是显示匹配到的行号。

$(美元符)功能实践
#匹配结尾字符为y的所在行
[root@localhost ~]# grep -n "y$" test.log

^$功能实践
#匹配所有的空行进行显示
[root@localhost ~]# grep -n "^$" test.log

(点)功能实践
#匹配任意单个字符进行显示(排除空行)
[root@localhost ~]# grep -n "." test.log

\(转义符)功能实践
#将特殊字符进行转义,忽略其特殊意义

*(星号)功能实践
#匹配任意的项0次或者多次

.*组合符功能实践
.* 组合在一起使用可以匹配任意字符串

#匹配任意以o开头的行

[](中括号)功能实践
#匹配到任意包含a-z 字母的字符

[^abc](中括号内取反符)功能实践
#匹配取反字符,将^放在括号内代表取反的意思

扩展正则表达式实践
+(加号)功能实践
#匹配之前+号之前的字符1次或者多次

?(问号)功能实践
#匹配之前?号之前的字符1次或者0次

|(竖线)功能实践
#竖线匹配可以进行多个值的选定

() 功能实践
要求:取出包含good或glad的行

#后向引用,后项引用主要用作于匹配分组调换顺序的时候进行使用,\1 表示调用前面第一个括号里面的内容,\2 代表调用第2个括号里面的内容,最多能引用九个括号,也就是说支持从 \1 - \9。

{n,m}匹配次数功能实践
#单独使用一个大括号,可以引用前面的字符一次到多次

\< \>边界符锚定
#边界符可以用固定字符的匹配
\<:其后面的字符必须作为单词的首部出现
\>:其前的字符必须作为单词的尾部出现
\<root\<:root必须作为一行的单词出现

在Shell下使用这些正则表达式处理文本最多的命令有下面几个工具:
| 命令 | 描述 |
|---|---|
| grep | 默认不支持扩展表达式,加-E选项开启ERE。如果不加-E使用花括号要加转义符{} |
| egrep | 支持基础和扩展表达式 |
| awk | 支持egrep所有的正则表达式 |
| sed | 默认不支持扩展表达式,加-r选项开启ERE。如果不加-r使用花括号要加转义符{} |
Shell 正则表达式详解的更多相关文章
- linux shell 正则表达式详解
正则 1. 普通正则表达式 2. 扩展正则表达式 普通正则表达式 . 任意一个字符 * 前面一个字符出现0次或者多次 [abc] 中括号内任意一个字符 [^abc] 非括号内任意一个字符 [0-9] ...
- (转)linux正则表达式详解
linux正则表达式详解 http://blog.csdn.net/wuliowen/article/details/64131815 1:什么是正则表达式: 简单的说,正则表达式就是处理字符串的方法 ...
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- adb shell 命令详解,android
http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...
- Java 正则表达式详解_正则表达式
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- Django url配置 正则表达式详解 分组命名匹配 命名URL 别名 和URL反向解析 命名空间模式
Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11版本 ...
- 【Devops】【docker】【CI/CD】关于jenkins构建成功后一步,执行的shell命令详解+jenkins容器运行宿主机shell命令的实现方法
1.展示这段shell命令 +详解 #================================================================================= ...
随机推荐
- uniapp 扫二维码跳转
在h5和wxapp中 生成qrcode的组件 https://ext.dcloud.net.cn/plugin?id=39 wx小程序扫二位码文档 生成链接时 computed: { ...mapSt ...
- Linux 查看磁盘是否为SSD
第一步,找到磁盘 ll /dev/sd* ll /dev/vd* 第二步,查对应磁盘类型 cat /sys/block/sda/queue/rotational 结果: 返回0:SSD盘 返回1: ...
- 零基础学Python:数据容器
1.常用操作 列表常用操作 在 ipython 中定义一个 列表,例如: l= list() 输入 l. 按下 TAB 键, ipython 会提示 字典 能够使用的函数如下: 可以到官方网址查询使用 ...
- Django中文文档-模型Models(二):Meta选项、模型属性、模型方法
元数据(Meta)选项 使用内部的class Meta 定义模型的元数据,例如: from django.db import models class Ox(models.Model): horn_l ...
- nc替代ping
linux nc介绍: 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p< ...
- Python3基础-目录
Python3基础-目录(Tips:长期更新Python3目录) 第一章 初识Python3 1.1 Python3基础-前言 1.2 Python3基础-规范 第二章 Python3内置函数&a ...
- 2020年12月-第01阶段-前端基础-HTML常用标签
1. HTML常用标签 首先 HTML和CSS是两种完全不同的语言,我们学的是结构,就只写HTML标签,认识标签就可以了. 不会再给结构标签指定样式了. HTML标签有很多,这里我们学习最为常用的,后 ...
- Python字典与集合
一 字典创建.访问.添加.删除.修改.内建函数.内建方法 创建,列表不能作为键,因为键不能变?字典也不能作为键 dict1 = {} dict2 = {'name':'qq','sex':'male' ...
- scala集合上常用的方法
sacala 关于集合常用的操作 map1.映射:对集合中的每一个元素进行执行某一项操作2.返回值类型,正常情况不变,原来集合是什么类型,就返回什么类型3.元素类型,根据我们函数的返回值类型 val ...
- Dart 学习
语言特性 Dart所有的东西都是对象, 即使是数字numbers.函数function.null也都是对象,所有的对象都继承自Object类. Dart动态类型语言, 尽量给变量定义一个类型,会更安全 ...