shell编程之正则表达式
什么是正则表达式?正则表达式是用于描述字符排列和匹配模式的一种语法规则。在很多程序设计语言中都支持利用正则表达式来进行字符串的操作,不同语言中的正则表达式略有不同,但是毕竟都是正则,其本质思想都是一致的,当我们掌握了shell中的正则后,再去看python或者perl里面的正则表达式时,会发现其实都是一样的东东。
在shell的一些命令中,有些并不支持正则表达式,但是它们支持Linux里面的通配符,那么通配符又是什么东东呢,它跟正则表达式又有什么关系?
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令都支持正则表达式。通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。
通配符主要是下面三个:
| * | 匹配任意字符 |
| ? | 匹配任意一个内容 |
| [] | 匹配中括号中的一个字符 |
首先,正则表达式是用来匹配文件中文本的字符串,而通配符是用来匹配符合条件的文件名;其次正则表达式是包含匹配,只要包含正则中的字符串,就匹配,而通配符是完全匹配,也就是说,必须要与条件中的字符串一模一样才会匹配。
说了这么多,其实正则表达式主要用于字符串的模式分割、匹配、查找及替换操作,下面来关注一下正则表达式基本的元字符和它的作用。
| 元字符 | 作用 | 举例说明 |
| * | 前一个字符匹配0次或者任意多次 | "a*" 匹配所有内容,包括空白行 "aa*" 匹配至少包含一个a的行 "aaa*" 匹配最后包含两个连续a的字符串 "aaaaa*"匹配最少包含4个连续a的字符串 |
| . | 匹配除了换行符外的任意一个字符 |
"s..d" 匹配在s和d这两个字母之间一定有两个 字符的单词 |
| ^ | 匹配行首 | "^hello" 匹配以hello开头的行 "^M" 匹配以大写“M”开头的行 |
| $ | 匹配行尾 | "hello$" 匹配以hello结尾的行 "n$" 匹配以小写“n”结尾的行 "^$" 匹配空白行 |
| [] | 匹配中括号中指定的任意一个字符,只匹配一 个字符 |
"[aeiou]" 匹配任意一个元音字母, 两位字符。 "[0-9]" 匹配任意一个数字 "^[a-z]" 匹配小写字母开头的行 |
| [^] | 匹配中括号的字符以外的任意一个字符 | "[^0-9]" 匹配任意一位非数字字符, "[^a-z]" 表示任意一位非小写字母 "^[^a-z]" 匹配不是小写字母开头的行 "^[^a-zA-Z]" 匹配不是字母开头的行 |
| \ | 转义符。用于将特殊符号的含义取消 | "\.$" 匹配使用"."结尾的行 |
| \{n\} | 表示其前面的字符恰好出现n次 | "[0-9]\{4\}" 匹配4位数字, "[1][3-8][0-9]\{9\}" 匹配手机号码 "a\{3\}" 匹配a字母连续出现3次的字符串 "[0-9]\{3\}" 匹配包含连续的3个数字的字符串 |
| \{n,\} | 表示其前面的字符出现不小于n次 |
"[0-9]\{2,\}" 表示两位及以上的数字。 的字符串 |
| \{n,m\} | 表示其前面的字符至少出现n次,最多出现 m次 |
"[a-z]\{6,8\}" 匹配6到8位的小写字母。 最多三个a |
下面举几个个简单的列子:
(1)匹配日期格式YYYY-MM-DD "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}"
(2)匹配IP地址XXX.XXX.XXX "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
(3)匹配腾讯QQ号码 "[1-9][0-9]\{4,9\}"
shell编程之正则表达式的更多相关文章
- Linux学习——shell编程之正则表达式和字符处理命令
shell编程之正则表达式 一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分隔.匹配.查找及替换操作. 2 shell编程之正则表达式 ...
- 05 shell编程之正则表达式
正则表达式&&文本处理利器 学习目标: l 掌握正则表达式的运用 l 掌握sed.awk文本处理工具的使用 目录结构: 正则表达式 正则表达式概述 l 正则表达式:使用单个字 ...
- 第5天(半天)【shell编程初步、grep及正则表达式】
第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...
- Linux学习笔记(17) Shell编程之基础
1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...
- Linux Shell编程入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- Linux Shell编程基础
在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls 显示当前路径下的文件,常用的有 -l 显示长格式 -a 显示所有包括隐 ...
- Shell编程检测监控mysql的CPU占用率
shell编程很强大! 网站访问量大的时候mysql的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法就是重启mysql服务.由于这种事具有不 ...
- Linux下的Shell编程
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- Shell学习笔记 - 正则表达式
一.正则表达式是什么? 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作. 二.正则表达式与通配符 1. 正则表达式 用来在文件中匹配符合条件的字 ...
随机推荐
- npm包与gem包--在线&离线安装
目录 NPM 在线 离线 GEM 在线 离线 NPM NPM,即为Node的包管理工具,官网为 https://www.npmjs.com/,我们可以在站内搜索所需要的NPM包,了解相关的使用规则 安 ...
- CSS技巧(一):清除浮动
什么是CSS清除浮动? 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高 ...
- Nancy之静态文件处理
今天我们来谈谈Nancy中的静态文件(JavaScript,CSS等)该如何处理. 在前面的Demo中,我们也已经用到了这一块的内容, 但并没有深入理解,只是停留在使用的层面上. 在进入今天的正题之前 ...
- 【C#】New操作符所做的事情
1.它计算类型以及所有基类型(一直到System.Object,虽然它没有定义自己的实例字段)中定义的所有实例字段需要的字节数.堆上的每个对象都需要一些额外的成员---即“类型对象指针”和“同步块索引 ...
- c#自定义日志记录
废话不多说,直接上代码: 很简单:将类复制到项目中,最后在配置文件上配置一下:logUrl即可. 默认保存在:项目/temp/log /// <summary> /// 日志类 /// & ...
- C#~异步编程续~.net4.5主推的await&async应用
返回目录 之前写过两篇关于异步编程的文章,详细可以进入C#~异步编程和C#~异步编程在项目中的使用 .net的各个版本都有自己主推的技术,像.NET1.1中的委托,.NET2.0中的泛型,.NET3. ...
- PetaPoco4.0的事务为什么不会回滚
using (var srop=DbHelper.CurrentDb.GetTransaction()) { ID = bp.AddModel(model).ToStr(); #region 参与楼盘 ...
- 解决使用Skia图形库时遇到的几个问题
Skia是一个开源的2D图形库,提供通用的API,适用于工作中遇到的各种硬件和软件平台.这是谷歌浏览器Chrome OS,Android的图形引擎,Mozilla Firefox浏览器和Firefox ...
- C++笔记 之 基础回顾(一)
1 exe 程序
- 使用KMP算法判断是否为旋转词
假设有两个字符串A.B,要判断它们是否为旋转词,只需构造一个"A+A"字符串,再与B比较,若B为A的旋转词,则使用KMP算法是可以得到结果的 代码如下: import java.u ...