shell脚本(14)-正则表达式
一、正则表达式介绍
正则表达式是一种文本模式匹配,包括普通字符(a...z)和特殊字符(元字符)。
它是一种字符串匹配模式,可以用来检查一个字符串是否含有某种子串、将匹配的子串替换或者从某个字符串中取出某个条件的子串
shell支持正则表达式,但是不是所有的命令都支持正则,常见的命令中只有grep、sed、awk命令支持正则表达式
二、特殊字符
1、定位符使用-模糊匹配与精准匹配:
同时锚定开头和结尾,做精确匹配;单一锚定开发和结尾,做模糊匹配。
定位符 | 说明 |
^ | 锚定开头^a以a开发,默认锚定一个字符 |
$ | 锚定结尾a$以a结尾,默认锚定一个字符 |
举例说明:定位符
[root@localhost test20210731]# egrep "^abbbc$" file #正则匹配,等价于grep -e 或 grep -E,精确匹配
abbbc
[root@localhost test20210731]# egrep "^ab" file #匹配开头为ab
abbbc
abababa
abC
[root@localhost test20210731]# egrep "bb$" file #匹配结尾为bb
aabb
&abbb
bbbb
2、匹配符-匹配字符串:
匹配符 | 说明 |
. | 匹配除回车以外的任意字符 |
() | 字符串分组 |
[] | 定义字符串,匹配括号中的一个字符 |
[^] | 表示否定括号中出现字符串的字符,取反 |
\ | 转义字符 |
| | 管道-或,结合分组使用 |
举例说明匹配符:
[root@localhost test20210806]# egrep "^a.c$" file #匹配a开头,c结尾,中间任意字符
aBc
aYc
a*c
a4c
a9c
a7c
[root@localhost test20210801]# egrep "^a[0-9]c$" file #匹配a开头c结尾,中间的字符为0-9
a4c
a9c
a7c
[root@localhost test20210801]# egrep "^a[^0-9]c$" file #匹配a开头c结尾,中间非数字
aBc
aYc
a*c
[root@localhost test20210801]# egrep "^a\*c$" file #精确匹配a*c的情况
a*c
[root@localhost test20210801]# egrep "^a*c$" file #不加转义无法匹配
ac
[root@localhost test20210801]# egrep "^(a|b)c$" file #精确匹配以a或b开头,c结尾
ac
bc
3、限定符-对前面的符合或字符串做限定说明
限定符 | 说明 |
* | 某个字符之后加星号表示该字符不出现或出现多次 |
? | 与型号类似,但略有不行,表示该字符出现一次或不出现 |
+ | 与星号类似,表示其前面字符出现一次或多次,但是至少出现一次 |
{n,m} | 某个字符之后出现,表示该字符最少n次,最多m次 |
{m} | 某个字符出现m次 |
举例说明限定符:
[root@localhost test20210806]# egrep "^ab*c$" file #ab字符中匹配有b(全部需要是b)或没有b
abbbc
ac
[root@localhost test20210806]# egrep "^ab*c$" file #ab字符中匹配有b(全部需要是b)或没有b
abbbc
ac
abc
[root@localhost test20210806]# egrep "^ab?c$" file #ab字符中匹配有b(出现一次)或没有b
ac
abc
[root@localhost test20210806]# egrep "^ab+c$" file #ac字符中匹配有b(至少出现一次)
abbbc
abc
[root@localhost test20210806]# egrep "^ab*c$" file #ac字符中匹配有b(全部需要是b)或没有b
abbbc
ac
abc
[root@localhost test20210806]# egrep "^ab?c$" file #ac字符中匹配有b(出现一次)或没有b
ac
abc
[root@localhost test20210806]# egrep "^ab+c$" file #ac字符中匹配有b(至少出现一次)
abbbc
abc
[root@localhost test20210806]# egrep "^ab{1,3}c$" file #ac字符中匹配有b(出现在1次到3次内)
abbbc
abc
[root@localhost test20210806]# egrep "^ab{3}c$" file #ac字符中匹配有b(正好出现3次)
abbbc
三、POSIX字符
特殊字符 | 说明 |
[:alnum:] | 匹配任意字母字符0-9 a-z A-Z |
[:alpha:] | 匹配任意字母,大写或小写 |
[:dight:] | 数字0-9 |
[:graph:] | 非空字符(非空格控制字符) |
[:lower:] | 小写字符a-z |
[:upper:] | 大写字符A-Z |
[:cntrl:] | 控制字符 |
[:print:] | 非空字符(包括空格) |
[:punct:] | 标点符号 |
[:blank:] | 空格和TAB字符 |
[:xdigit:] | 16进制数字 |
[:space:] | 所有空白字符(新行、空格、制表符) |
注意:[[]]双中括号的意思:第一个中括号是匹配符[]匹配中括号中的任意一个字符,第二个[]格式如[:digit:]
举例说明:
[root@localhost tesr20210807]# egrep "^a[[:alnum:]]c$" file #a开头c结尾,中间一个字符匹配非特殊符号
aBc
aYc
a4c
a9c
a7c
abc
[root@localhost tesr20210807]# egrep "^a[[:alnum:]]c$" file #a开头c结尾,中间一个字符匹配任意字母
aBc
aYc
a4c
a9c
a7c
abc
[root@localhost tesr20210807]# egrep "^a[[:alnum:]]c$" file #a开头c结尾,中间一个字符匹配非特殊符号
aBc
aYc
a4c
a9c
a7c
abc
[root@localhost tesr20210807]# egrep ^C]c$" file #a开头c结尾,中间一个字符匹配任意字母
[root@localhost tesr20210807]# egrep "^a[[:alnum:]]c$" file #a开头c结尾,中间一个字符匹配非特殊符号
aBc
aYc
a4c
a9c
a7c
abc
[root@localhost tesr20210807]# egrep "^a[[:alpha:]]c$" file #a开头c结尾,中间一个字符匹配任意字母
aBc
aYc
abc
[root@localhost tesr20210807]# egrep "^a[[:digit:]]c$" file #a开头c结尾,中间一个字符匹配任意数字
a4c
a9c
a7c
[root@localhost tesr20210807]# egrep "^a[[:graph:]]c$" file #a开头c结尾,中间一个字符匹配非空字符
aBc
aYc
a*c
a4c
a9c
a7c
abc
a,c
[root@localhost tesr20210807]# egrep "^a[[:lower:]]c$" file #a开头c结尾,中间一个字符匹配小写字母
abc
[root@localhost tesr20210807]# egrep "^a[[:upper:]]c$" file #a开头c结尾,中间一个字符匹配大写字母
aBc
aYc
[root@localhost test20210807]# egrep "^a[[:blank:]]c$" file #a开头c结尾,中间一个字符为空格或TAB
a c
a c
[root@localhost test20210807]# egrep "^a[[:space:]]c$" file #a开头c结尾,中间匹配所有空白、空行、制表符
a c
a c
[root@localhost test20210807]# egrep "^a[[:blank:]]c$" file #a开头c结尾,中间一个字符为空格或TAB
a c
a c
[root@localhost test20210807]# egrep "^a[[:space:]]c$" file #a开头c结尾,中间匹配所有空白、空行、制表符
a c
a c
[root@localhost test20210807]# egrep "^a[[:blank:]]c$" file #a开头c结尾,中间一个字符为空格或TAB
a c
a c
[root@localhost test20210807]# egrep "^a[[:space:]]c$" file #a开头c结尾,中间一个字符匹配空白、空行、制表符
a c
a c
[root@localhost test20210807]# egrep "^a[[:punct:]]c$" file #a开头c结尾,中间一个字符匹配标点符号
a*c
a,c
[root@localhost test20210807]# egrep "^a[[:print:]]c$" file #a开头c结尾,中间一个字符匹配非空字符(含括号)
aBc
aYc
a*c
a4c
a9c
a7c
abc
a c
a,c
[root@localhost test20210807]# egrep "^a[[:xdigit:]]c$" file #a开头c结尾,中间一个字符匹配十六进制数
aBc
a4c
a9c
a7c
abc
四、常见正则匹配:
1、数字:^[0-9]*$
2、汉字:^[\u4e00-\u9fa5]{0,}$
3、英文字母:^[A-Za-z]+$
4、手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5、IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
更多正则表达式参考:
shell脚本(14)-正则表达式的更多相关文章
- shell脚本三——正则表达式
shell函数:shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式:fun() { 命令 } Shell ...
- shell脚本学习—正则表达式
正则表达式概念.特点 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”, 这个“规则字符串”用来表达对字符串的一种过滤辑. 给定一个 ...
- shell脚本之正则表达式
具体参考: www.jb51.net/tools/shell_regex.html 正则表达式常用于grep AWK 等工具中
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- shell脚本 字串截取 正则表达式
字串处理 子串截取方法一:使用${}表达式格式:echo ${x:起始位置:长度}(起始位置编号从0开始,可省略) 方法二:使用expr substr格式:expr substr "$x&q ...
- Shell脚本的编写,sed的使用以及一些正则表达式
Shell脚本的简单编写以及sed的使用 标签(空格分隔): 博客文章 前一阵子为了批量修改Web审计规则,故编写了一个Shell脚本,顺便使用了下sed,顺便把正则表达式也重新学习一遍,感觉还是需要 ...
- shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式
shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式 1.sort命令 概述: Linux sort命令用于将文本文件内容加以排序. sort命令可针对文本文件的内容,以行为单 ...
- Linux shell 脚本攻略之正则表达式入门
摘自:<Linux shell 脚本攻略> 下面是类似的解释:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---14
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
随机推荐
- vs中打开ashx文件没有提示,没有高亮标记解决方法
在VS菜单中 工具 --- 选项 --- 文本编辑器 --- 文件扩展名,在右侧添加 ashx ,选中Microsoft Visual C# 保存后,再打开就行了 ashx文件头部报错后,删除 < ...
- Devops 改变coding —— 安装个指定版本的 jenkins 发现和想象的不太一样?
你好呀,我是小猿来也,一个刚开始折腾 Devops 的程序猿. 写在前面 前两天在池大那里看到了一段话,原话出自美团首席科学家夏华夏老师,具体内容我贴到了下面. 对于图片里的内容你们是怎么认为的呢?我 ...
- excel VBA根据一列的逗号隔开值分行
Sub test1() Dim h Dim j As Integer j = 0 Dim n1 As Integer '分行单元格在第几列 Dim m1 As Integ ...
- Pycharm破解版_安装从失败到成功
前言: 入门学习的时候一直用的是社区版的,现在想换个专业版的玩玩. 本文使用的环境说明: win10系统 安装过pycharm社区版,已卸载 已安装python 3.8.5 (建议看完整篇文章后再自行 ...
- oscp-缓冲区溢出(持续更新)
环境准备 Windows7虚拟机(我选了IE8,其实也没什么关系) 微软官方下载地址 These virtual machines expire after 90 days. We recommend ...
- centos8添加中文语言包
centos8添加中文语言包 系统:centos8 查看: [root@centos8]# locale -a 不支持中文包,按照centos7的方式安装:yum install kde-l10n-C ...
- java:编写jar包加密工具,防止反编译
懒人方案 网盘: 链接:https://pan.baidu.com/s/1x4OB1IF2HZGgtLhd1Kr_AQ提取码:glx7 网盘内是已生成可用工具,下载可以直接使用,使用前看一下READ. ...
- 在web.xml正确加载spring配置文件的方式
ssm框架整合时一直报出没有创建实例bean的错误,一直以为是代码原因,反复测试了很久,才找到原因是spring配置文件没有正确导入,下图是我的错误示例 web.xml加载spring配置文件的方式主 ...
- MyBatis-HotSwap, MyBatis热部署
https://github.com/xiaochenxinqing/MyBatis-HotSwap 1 https://github.com/xiaochenxinqing/MyBatis-Ho ...
- Python之面向对象编程【小明跑步】、【置办家具】
#!usr/bin/python 2 #encoding=utf-8 3 #-----------------小明跑步------------- 4 #1.小明体重75.0公斤 5 #2.小明每次跑步 ...