什么是正则表达式?正则表达式是用于描述字符排列和匹配模式的一种语法规则。在很多程序设计语言中都支持利用正则表达式来进行字符串的操作,不同语言中的正则表达式略有不同,但是毕竟都是正则,其本质思想都是一致的,当我们掌握了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这两个字母之间一定有两个

字符的单词
"s.*d" 匹配在s和d字母之间有任意字符
".*" 匹配所有内容

^ 匹配行首 "^hello" 匹配以hello开头的行
"^M" 匹配以大写“M”开头的行
$ 匹配行尾 "hello$" 匹配以hello结尾的行 
"n$" 匹配以小写“n”结尾的行
"^$" 匹配空白行
[] 匹配中括号中指定的任意一个字符,只匹配一
个字符

"[aeiou]" 匹配任意一个元音字母,
"[0-9]" 匹配任意一位数字,
"[a-z][0-9]" 匹配小写字母和一位数字构成的

两位字符。
"s[ao]id" 匹配s和i字母中,要么是a,要么是o

"[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,\}" 表示两位及以上的数字。
"[0-9]\{3,\}[a-z]" 匹配最少用连续3个数字开头

的字符串

\{n,m\} 表示其前面的字符至少出现n次,最多出现
m次

"[a-z]\{6,8\}" 匹配6到8位的小写字母。
"sa\{1,3\}i" 匹配在字母s和i直接有最少一个a,

最多三个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编程之正则表达式的更多相关文章

  1. Linux学习——shell编程之正则表达式和字符处理命令

    shell编程之正则表达式 一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分隔.匹配.查找及替换操作. 2 shell编程之正则表达式 ...

  2. 05 shell编程之正则表达式

    正则表达式&&文本处理利器 学习目标: l  掌握正则表达式的运用 l  掌握sed.awk文本处理工具的使用 目录结构:   正则表达式 正则表达式概述 l  正则表达式:使用单个字 ...

  3. 第5天(半天)【shell编程初步、grep及正则表达式】

    第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...

  4. Linux学习笔记(17) Shell编程之基础

    1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...

  5. Linux Shell编程入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  6. Linux Shell编程基础

    在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls   显示当前路径下的文件,常用的有 -l 显示长格式  -a 显示所有包括隐 ...

  7. Shell编程检测监控mysql的CPU占用率

    shell编程很强大! 网站访问量大的时候mysql的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法就是重启mysql服务.由于这种事具有不 ...

  8. Linux下的Shell编程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  9. Shell学习笔记 - 正则表达式

    一.正则表达式是什么? 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作. 二.正则表达式与通配符 1. 正则表达式 用来在文件中匹配符合条件的字 ...

随机推荐

  1. Objective-C 对象(内容根据iOS编程编写)

    开发iOS程序需要使用 Objective-C 语言和Cocoa Touch框架.Objective-C 源于 C 语言,是 C 语言的扩展. Cocoa Touch框架是一个Objective-C类 ...

  2. List集合去重的一种方法

    前一段时间们需要对一个List<Model>集合去重,情况是该集合中会出现多个Name属性值相同的,但是其他属性值不同的数据. 在这种情况下,需求要只保留其中一个就好. 我觉得遍历和Has ...

  3. C#~异步编程再续~await与async引起的w3wp.exe崩溃

    返回目录 最近怪事又开始发生了,IIS的应用程序池无做挂掉,都指向同一个矛头,async,threadPool,Task,还有一个System.NullReferenceException,所以这些都 ...

  4. OData V4 系列 Action 与 Function

    OData 学习目录 了解过WebApi的都知道,WebApi默认方法 Get.Post.Put,如果增加其它过多Post方法即不能识别,还需增加其它配制,请求的Url还需加上Controller及A ...

  5. 一款简洁大气的jquery日期日历插件

    本jquery插件名为manhuaDate,暂时只支持jquery 1.9.0以下版本,比如jquery-1.8.3.min.js 查看效果网址:http://keleyi.com/a/bjad/em ...

  6. PHP如何连接MySQL数据库

    * PHP连接MySQL数据库 * 准备工作 * 在XAMPP软件的安装目录/php/ext目录中 * php_mysql.dll和php_mysqli.dll文件必须存在 * 在XAMPP软件的安装 ...

  7. jqueryAPI使用之选择器

    好一段时间没有更新博文了.刚学习完JS基础知识后,也进入到了JQ的学习.为了能熟练掌握JQ的使用,最好的方法就是反复多练,讲JQ中的API的每个知识点都练习一遍.如果能做到这个,那么对JQ就没那么陌生 ...

  8. UITextFieldDelegate协议

    很多人都认为UITextField很简单,为什么会写这个协议呢? 因为在实际开发中可能会用到: 比如要做到下图的效果: 文本框下面的下划线的颜色要随着输入的状态变化: 点击对应的文本框,其下面的线条变 ...

  9. Java学习心得之 HttpClient的GET和POST请求

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 HttpClient的GET和POST请求 1. 前言2. GET请求3 ...

  10. 《C#高级编程》读书笔记

    <C#高级编程>读书笔记 C#类型的取值范围 名称 CTS类型 说明 范围 sbyte System.SByte 8位有符号的整数 -128~127(−27−27~27−127−1) sh ...