正则表达式与通配符

  • 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep,awk,sed等命令可以支持正则表达式。
  • 通配符用来匹配符号条件的文件名通配符是完全匹配。ls,find,cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配。

通配符

符号 作用
* 匹配任意内容
匹配任意一个内容
[] 匹配括号中的一个字符

基础正则表达式

元字符 作用
* 前一个字符匹配0次或多次
. 匹配除了换行符外任意一个字符
^ 匹配行首。例如:^hello会匹配以hello开头的行
$ 匹配行尾。例如:hello$会匹配以hello结尾的行
[]

匹配中括号中指定的任意一个字符,只匹配一个字符。

例如:[0-9]匹配任意一位数字,[a-z][0-9]匹配小写字和一位数字构成的两位字符

[^] 匹配除中括号的字符以外的任意一个字符。例如:[^0-9]匹配任意一位非数字字符,[^a-z]表示任意一位非小写字母
\ 转义符。用于取消特殊符号的含义取消
\{n\} 表示前面的字符恰好出现n次。例如:[0-9]\{4\}匹配四位数字,[1][3-8][0-9]\{9\}匹配手机号码
\{n,\} 表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}表示两位及以上的数字;左右两边边界不限定死,该正则无太大意义,类似于包含
\{n,m\} 表示其前面的字符至少出现n次,最少出现m次。例如:[a-z]\{6,8\}匹配6到8位的小写字母

“*” 前一个字符出现0次或多次

  • “a*”:匹配所有的内容,包括空白行
  • “aa*”:匹配至少包含一个a的行
  • “aaa*”:匹配至少包含二个a的行
  • “aaaa*”:匹配至少包含三个a的行

“.” 匹配除了换行符外任意一个字符

  • “s..d”:匹配在s和d这两个字母中间一定有两个字符的单词
  • ”s.*d“:匹配在s和d这两个字母中间有任意字符个数的单词
  • ”.*“:匹配所有内容

“^” 匹配行首  “$” 匹配行尾

  • “^M”:匹配以M开头的行
  • “n$”:匹配以小写n结尾的行
  • “^$”:匹配空白行

“[]” 匹配中括号中指定的任意一个字符,只匹配一个字符

  • “s[ao]id”:匹配在s和i子母中,要么是a,要么是o
  • “[0-9]”:匹配任意一个数字
  • “^[a-z]”:匹配用小写字母开头的行

“[^]” 匹配除中括号的字符以外的任意一个字符

  • “^[^a-z]”:匹配不用小写字母开头的行
  • “^[^a-zA-Z”:匹配不用字母开头的行

“\” 转义符

  • “\.$”:匹配使用“.”结尾的行

“\{n\}” 表示前面的字符恰好出现n次

  • “a\{3\}”:匹配a字母连续出现三次的字符串
  • “[0-9]\{3\}”:匹配包含连续的三个数字的字符串

“\{n,\}” 表示其前面的字符出现不少于n次

  • “^[0-9]\{3,\}”:匹配最少用3个数字开头的行

“\{n,m\}” 匹配其前面的字符至少出现n次,最多出现m次

  • “sa\{1,3\}i”:匹配在字母a和字母i之间有至少一个a,最多出现三个a

Shell系列(19)- 正则表达式的更多相关文章

  1. Linux Shell系列教程之(十三)Shell分支语句case … esac教程

    本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程 分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使 ...

  2. Linux Shell系列教程之(五)Shell字符串

    本文是Linux Shell系列教程的第(五)篇,更多shell教程请看:Linux Shell系列教程 字符串是Shell编程中最常用最有用的数据类型,今天,Linux大学网就为大家介绍一下在She ...

  3. 任督二脉之Shell中的正则表达式

    VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...

  4. Linux Shell系列教程之(十七) Shell文件包含

    本文是Linux Shell系列教程的第(十七)篇,更多Linux Shell教程请看:Linux Shell系列教程 通过文件包含,可以引用其他文件的内容,也可以将复杂内容分开,使程序结构更加清晰. ...

  5. Linux Shell系列教程之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  6. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

  7. Linux Shell系列教程之(十四) Shell Select教程

    本文是Linux Shell系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句case ...

  8. Linux Shell系列教程之(十二)Shell until循环

    本文是Linux Shell系列教程的第(十二)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上两篇文章Linux Shell系列教程之(十)Shell for循环和Lin ...

  9. Shell中的正则表达式及字符串处理

    shell里一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所 ...

  10. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览  ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ...

随机推荐

  1. Windows10公钥远程连接Linux服务器

    目录 前言 一.环境准备 二.使用步骤 1.服务器安装并配置OpenSSH 2. 本地生成密钥 3. 服务器ssh添加密钥 三 总结 前言 使用公钥远程登陆Linux十分方便,无需输入密码,同时采用V ...

  2. 一篇文章让你搞懂如何通过Nginx来解决跨域问题

    Nginx跨域实现   首先大家要搞清楚什么是跨域,为什么会有跨域情况的出现.哪些情况属于跨域? 跨域:由于浏览器的同源策略,即属于不同域的页面之间不能相互访问各自的页面内容 注:同源策略,单说来就是 ...

  3. SQL 练习8

    查询「李」姓老师的数量 SELECT Tname,COUNT(Tname)数量 from Teacher GROUP BY tname HAVING Tname LIKE '李%'

  4. Web安全-CDN相关技术

    CDN介绍 CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发. ...

  5. bt面板安装邮局系统

    前些日子阿里云优惠就顺便买了个服务器,今天想在阿里云的服务器上试着安装一个邮件服务,突然发现之前安装的好好的邮件服务插件不能正常安装了,一直报错. 点击该链接享受本文章的纯净无广告版 查看了下出错的地 ...

  6. Flink API

    一.Flink API 1.DataSet:对静态数据进行批处理操作.将静态数据抽象成分布式数据集,使用Flink各种操作符处理数据,支持 Java .Scala.Python 2.DataStrea ...

  7. go-Gorm

    软删除 如果模型中有 DeletedAt 字段,它将自动拥有软删除的能力!当执行删除操作时,数据并不会永久的从数据库中删除,而是将 DeletedAt 的值更新为当前时间.

  8. promise的信任问题&控制反转

    //信任问题 //第三方的某个库 function method(cb){ setTimeout(function(){ cb && cb(); //这个库的bug:函数被多调用了一次 ...

  9. 分数化循环小数C++实现

    引言 前一阵做了一个有理数四则混合运算的程序(详见:用C++实现的有理数(分数)四则混合运算计算器),以分数形式呈现运算结果.这次添加以循环小数形式呈现运算结果的功能.例如: Please input ...

  10. Qt编译工程提示qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法

    总是提示 qt creator no rule to make target opencv2/core/hal/interface.h need by debug解决方法: 也算是花了整整两个小时踩坑 ...