1、扩展正则表达式说明

熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Shell的正则表达式中还可以支持一些元字符,比如+|()

其实Linux系统是支持这些字符的,只是grep命令默认不支持而已(grep命令无法识别扩展正则表达式)。

如果要想支持这些字符,必须使用egrep命令或grep -E选项,才能识别扩展正则表达式的字符,所以我们又把这些字符称作扩展字符。

egrep命令和grep -E命令是一样的,所以我们可以把两个命令当做别名来对待。

扩展正则表达式符号如下:

扩展元字符 作用
+ 前一个字符匹配1次或任意多次。
go+gle会匹配goglegooglegooogle,当然如果o有更多个,也能匹配。
? 前一个字符匹配0次或1次。
colou?r可以匹配colourcolor
` `
() 匹配其整体为一个字符,即模式单元。可以理解为由多个单字符组成的大字符。
(dog)+会匹配dogdogdogdogdogdog等,因为被()包含的字符会当成一个整体。
但`hello (world

2、练习

(1)+?练习

如下文本:

Stay hungry, stay foolish.  ——Steve Jobs
求知若饥,虚心若愚。——乔布斯 Stay hungry, stay flish. ——Steve Jobs
Stay hungry, stay folish. ——Steve Jobs
Stay hungry, stay fooolish. ——Steve Jobs
Stay hungry, stay foooolish. ——Steve Jobs
Stay hungry, stay fooooolish. ——Steve Jobs
  • +

    +表示匹配前一个字符1次或任意多次。

    执行命令:grep -E "fo+l" test2.txt



    我们可以看到foolish单词中,有o的全部匹配到了,而flish被过滤掉。
  • ?

    ?表示匹配前一个字符0次或1次。

    执行命令:grep -E "fo?l" test2.txt

  • 最后我们再来看一下*

    *表示匹配前一个字符匹配0次或任意多次。

    执行命令:grep -E "fo*l" test2.txt



    可以看出,+?就相当于把*从1的位置分成了两部分,?是匹配前一个字符0次或1次,+是匹配前一个字符1次或任意多次。

(2)|()练习

这两个符号经常会联合使用。

|匹配两个或多个分支选择,表示或者的意思。

()匹配其整体为一个字符,表示整体的意思。

练习:匹配IP地址。

文本内容如下:

192.168.1.222
6666666666666

执行命令:grep -E "^(([0-9]\.)|([1-9][0-9]\.)|(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)){3}(([0-9])|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))$" text3.txt

在Shell中能识别的正则表达式就是这些了。

3、注意(重点)

通过正则表达式匹配邮箱来说明:

匹配邮箱正则如下:

[0-9a-zA-Z_]+@[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+){1,3}

说明:

  • [0-9a-zA-Z_]+(邮箱名称):表示数字、小写字母、大写字母、下划线可以重复最少1次。
  • [0-9a-zA-Z_]+(邮箱域名):表示数字、小写字母、大写字母、下划线可以重复最少1次。
  • (\.[0-9a-zA-Z_]+){1,3}:表示数字、小写字母、大写字母、下划线可以重复最少1次,整体可重复1到3次。比如:处理com.cn格式等。

特别注意:

我们可以看到上边{1,3},并没有写成基础正则表达式\{1,3\}的样式。

是因为grep -E命令支持标准的正则表达式格式,不再需要对{}进行转义,如果加上转义符,还会报错。

这点需要特别注意一下。

『忘了再学』Shell基础 — 25、扩展正则表达式的更多相关文章

  1. 『忘了再学』Shell基础 — 30、sed命令的使用

    目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...

  2. 『忘了再学』Shell基础 — 3、echo命令的介绍与使用

    目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...

  3. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  4. 『忘了再学』Shell基础 — 24、Shell正则表达式的使用

    目录 1.正则表达式说明 2.基础正则表达式 3.练习 (1)准备工作 (2)*练习 (3).练习 (4)^和$练习 (5)[]练习 (6)[^]练习 (7)\{n\}练习 (8)\{n,\}练习 ( ...

  5. 『忘了再学』Shell基础 — 1、Shell的介绍

    目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...

  6. 『忘了再学』Shell基础 — 4、Bash基本功能(history命令)

    目录 1.history历史命令 2.设置命令历史记录的条数 3.清空历史命令 4.历史命令的调用 5.命令与文件的补全 在Linux系统中默认的Shell就是Bourne-AgainShell(简称 ...

  7. 『忘了再学』Shell基础 — 9、Bash中的特殊符号(一)

    目录 1.双单引号 2.双引号 3.$符号 4.反引号 5.$()符号 6.#符号 7.\符号 1.双单引号 '':单引号.在单引号中所有的特殊符号,如$和"`"(反引号)都没有特 ...

  8. 『忘了再学』Shell基础 — 11、变量定义的规则和分类

    目录 1.定义变量的规则 2.变量的分类 1.定义变量的规则 在定义变量时,有一些规则需要遵守 变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是2name则是错误的. 在Bash ...

  9. 『忘了再学』Shell基础 — 16、位置参数变量

    目录 1.位置参数变量$n 2.位置参数变量$*和$@ 3.位置参数变量$# 位置參数变量的作用主要用于脚本的传参. 位置參数变量的名称和作用都是确定不能改变的,但是该变量的内容是可以更改的,也就是变 ...

随机推荐

  1. Mysql_事务_存储过程_触发器

    一.什么是事务? 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言( ...

  2. FastAPI(七十一)实战开发《在线课程学习系统》接口开发-- 查看留言

    之前FastAPI(七十)实战开发<在线课程学习系统>接口开发--留言功能开发分享了留言开发,这次我们分享查看留言 梳理这里的逻辑,这个接口要依赖登录. 1.判断用户是否登录 2.判断对应 ...

  3. HDMS(Headend Device Management System)软件下载

    进入官网http://www.pbi-china.com/CHS/index.aspx点击右下角的下载通道.

  4. Python中用类实现对象和封装

    """ 用类实现对象和封装 对象:对应客观世界的事物,将描述事物的一组数据和与这组数据有关的操作封装在一起, 形成一个实体,这个实体就是对象 类:具有相同或相似性质的对象 ...

  5. linux设备管理之主设备号与次设备号

    主设备号和次设备号 一个字符设备或者块设备都有一个主设备号和次设备号.主设备号和次设备号统称为设备号.主设备号用来表示一个特定的驱动程序.次设备号用来表示使用该驱动程序的其他设备.(主设备号和控制这类 ...

  6. QT-图标设置

    记录一下怎么在QT里添加图片,包括exe图标和里面使用的其他图片. 注意这个图片是指ico后缀的图片,去网上搜就有了,一大堆. 随便找的一个在线转换,http://www.bitbug.net/ 新建 ...

  7. [python][flask] Jinja 模板入门

    Flask 和 Django 附带了强大的 Jinja 模板语言. 对于之前没有接触过模板语言的人来说,这类语言基本上就是包含一些变量,当准备渲染呈现 HTML 时,它们会被实际的值替换. 这些变量放 ...

  8. OpenHarmony 3.1 Beta版本关键特性解析——HAP包安装实现剖析

    ​(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)​ 石磊 随着社会的不断发展,人们逐渐注重更加高效.舒适.便捷.有趣的生活和工作体验. OpenAtom OpenHa ...

  9. 关于在PyCharm中import numpy 出现from . import _mklinit ImportError: DLL load failed: 找不到指定模块

    最近因为一些原因安装了Anaconda3并且重新配置Python环境,但是遇到了一些麻烦的事情. 首先就是在Anaconda已经装好numpy和mkl的情况下,在PyCharm中import nump ...

  10. Qt(QtWebEngine)加载本地网页跨域问题的总结

    目录 1. 概述 2. 详论 2.1. 传参 2.2. JS module 3. 建议 4. 参考 1. 概述 浏览器直接加载本地网页的时候,如果网页涉及到加载本地资源(如图片),会出现跨域的问题.Q ...