Shell 正则表达式

什么是正则表达式?

正则表达式在每种语言中都会有,功能就是匹配符合你预期要求的字符串。

为什么要学正则表达式?

在企业工作中,我们每天做的linux运维工作中,时刻都会面对大量带有字符串的文本配置、程序、命令输出及日志文件等,而我们经常会有迫切的需要,从大量的字符串内容中查找符合工作需要的特定的字符串。这就要靠正则表达式。因此,可以说正则表达式就是为过滤字符的需求而生的!

例如:ifconfig的输出取IP,例如:cat /var/log/messages输出等

两个注意事项:

  1. 正则表达式应用非常广泛,存在于各种语言中,例如:php、python、java等。但是我们今天讲的linux系统运维工作中的正则表达式,即linux正则表达式,最常用正则表达式的命令就是grep(egrep)、sed、awk,换句话说linux四剑客剑客要想工作的各高效,那一定离不开正则表达式配合的。
  2. 正则表达式和我们常用的通配符特殊字符是用本质去别的,这一点要注意。通配符例子: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 命令增加正则表达式进行匹配练习

  1. ^(尖角号)功能实践
# 匹配首字母为%的行
[root@localhost ~]# grep -n "^%" test.log
# -n 参数是显示匹配到的行号。

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

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

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

  1. \(转义符)功能实践

#将特殊字符进行转义,忽略其特殊意义

  1. *(星号)功能实践

#匹配任意的项0次或者多次

  1. .*组合符功能实践

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

#匹配任意以o开头的行

  1. [](中括号)功能实践

#匹配到任意包含a-z 字母的字符

  1. [^abc](中括号内取反符)功能实践

#匹配取反字符,将^放在括号内代表取反的意思

扩展正则表达式实践

  1. +(加号)功能实践

#匹配之前+号之前的字符1次或者多次

  1. ?(问号)功能实践

#匹配之前?号之前的字符1次或者0次

  1. |(竖线)功能实践

#竖线匹配可以进行多个值的选定

  1. () 功能实践

要求:取出包含good或glad的行

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

  1. {n,m}匹配次数功能实践

#单独使用一个大括号,可以引用前面的字符一次到多次

  1. \< \>边界符锚定

#边界符可以用固定字符的匹配

\<:其后面的字符必须作为单词的首部出现

\>:其前的字符必须作为单词的尾部出现

\<root\<:root必须作为一行的单词出现

在Shell下使用这些正则表达式处理文本最多的命令有下面几个工具:

命令 描述
grep 默认不支持扩展表达式,加-E选项开启ERE。如果不加-E使用花括号要加转义符{}
egrep 支持基础和扩展表达式
awk 支持egrep所有的正则表达式
sed 默认不支持扩展表达式,加-r选项开启ERE。如果不加-r使用花括号要加转义符{}

Shell 正则表达式详解的更多相关文章

  1. linux shell 正则表达式详解

    正则 1. 普通正则表达式 2. 扩展正则表达式 普通正则表达式 . 任意一个字符 * 前面一个字符出现0次或者多次 [abc] 中括号内任意一个字符 [^abc] 非括号内任意一个字符 [0-9] ...

  2. (转)linux正则表达式详解

    linux正则表达式详解 http://blog.csdn.net/wuliowen/article/details/64131815 1:什么是正则表达式: 简单的说,正则表达式就是处理字符串的方法 ...

  3. Linux文本处理三剑客之grep及正则表达式详解

    Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...

  4. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  5. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  6. adb shell 命令详解,android

    http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...

  7. Java 正则表达式详解_正则表达式

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  8. Django url配置 正则表达式详解 分组命名匹配 命名URL 别名 和URL反向解析 命名空间模式

    Django基础二之URL路由系统 本节目录 一 URL配置 二 正则表达式详解 三 分组命名匹配 四 命名URL(别名)和URL反向解析 五 命名空间模式 一 URL配置 Django 1.11版本 ...

  9. 【Devops】【docker】【CI/CD】关于jenkins构建成功后一步,执行的shell命令详解+jenkins容器运行宿主机shell命令的实现方法

    1.展示这段shell命令 +详解 #================================================================================= ...

随机推荐

  1. window.ShadyCSS

    window.ShadyCSS Web Components # install $ yarn add @webcomponents/shadycss@1.7.1 # OR $ npm i @webc ...

  2. TypedArray & buffer

    TypedArray & buffer https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Obj ...

  3. NGK福利再升级,1万枚VAST限时免费送

    NGK在推出持有算力获得SPC空投活动后,福利再升级,于美国加州时间2021年2月8日下午4点推出新人福利活动,注册NGK成为新会员,即可获得0.2枚VAST奖励. VAST免费福利送活动仅送出1万枚 ...

  4. django学习-20.python3中的特殊方法【__str__】的作用

    目录结构 1.前言 2.[__str__]特殊方法的具体使用 2.1.当使用print打印一个类被实例化后生成的对象的时候,若类里有定义了[__str__]特殊方法,是打印出这样的数据:[__str_ ...

  5. ROS1与ROS2对比简述

    资料参考: https://blog.csdn.net/Fourier_Legend/article/details/106319000

  6. Fast-RTPS简介

    RTPS即DDS中的主要核心通信部分.它提供实时高效的去中心化publish/subscribe通信机制.是ROS-2的核心底层通信组件,也是未来机器人/无人驾驶领域一个必然的方向. 资料参考: ht ...

  7. C++算法代码——细胞问题

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1152 http://ybt.ssoier.cn:8088/problem_show. ...

  8. Mybatis-05 注解开发

    Mybatis-05 注解开发 注解开发 注解的核心是反射机制 面向接口编程的根本原因:解耦,可拓展,提高复用,分层开发中.上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性好. 1 ...

  9. 在.NET中使用Apache Kafka(一)

    ​曾经在你的应用程序中使用过异步处理吗?在处理不需要立即执行的任务时,异步代码似乎是不可避免的.Apache Kafka是最常用和最健壮的开源事件流平台之一.许多公司和开发者利用它的强大功能来创建高性 ...

  10. Java基础语法:abstract修饰符

    一.简介 描述: 'abstract'修饰符可以用来修饰方法,也可以修饰类. 如果修饰方法,那么该方法就是抽象方法:如果修饰类,那么该类就是抽象类. 抽象类和抽象方法起到一个框架作用,方便后期扩展的重 ...