1. 基础的正则表达式

1.1 正则表达式与通配符

(1)正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。

(2)通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

1.2 基础正则表达式

元字符

作用

*

前一个字符匹配0次或任意多次(是前一个字符,这与bash的通配符不同)

.

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

^

匹配行首。例如:^hello会匹配以hello开头的行

$

匹配行尾。例如:hello$会匹配以hello结尾的行

[]

匹配中括号中指定的任意一个字符只匹配一个字符。例如:[aoeiu]匹配任意一个元音字母,[0-9]匹配任意一个数字,[a-z][0-9]匹配小写字母和一位数字构成的两位字符。

[^]

匹配除中括号中字符以外的任意一个字符。例如:[^0-9]匹配任意一位非数字字符,[^a-z]表示任意一位非小写字母。

\

转义符。用于将特殊殊号的含义取消。

\{n\}

表示前面的字符恰好出现n次。实际上为{n},其中{}要转义为原来的含义。

\{n,\}

表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}表示两位及以上的数字

\{n,m\}

表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,8\}匹配6到8位的小写字母。

【编程实验】正则表达式

//测试文本(test_rule.txt)

Mr. Santa Claus said:
he was the honest man in HorzionStudio
123 depise him. But since Mr. Rolling Stone came,
he never saaaid those words.
55555nice! because,actuaaaaly,
Mr. Rolling Stone is the most honest man! Later, Mr. Santa Claus soid his hot body.

(1)“*”表示前一个字符匹配0次,或任意多次。

  ①#grep "a*" test_rule.txt  //匹配所有内容,包括空白行。(理解:*取0时,表示空白行或者可理解为在行中不出现a的行*≥1时表示a出现1次或多次的行。)

  ②#grep "aa*" test_rule.txt //至少包含有一个a的行。

  ③#grep "aaa*" test_rule.txt //至少包含两个连续a的字符串

  ④#grep "aaaa*" test_rule.txt //至少包含四个连续a的字符串。

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

  ①# grep "s..d" test_rule.txt //匹配在s和d之间一定有两个字符的字符串。

  ②# grep "s.*d" test_rule.txt //匹配在s和d字母之间有任意字符。

  ③# grep ".*" test_rule.txt   //匹配所有内容

(3)“^”匹配行首,“$”匹配行尾

  ①# grep "^M" test_rule.txt  //匹配以大写“M”开头的行

  ②# grep "n$" test_rule.txt  //匹配以小写n结尾的行

  ③# grep  -n "^$" test_rule.txt  //匹配空白行,-n表示输出的同时打印行号。

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

  ①# grep "s[ao]id" test_rule.txt //匹配s和i字母中,要不是a,要不是o

  ②# grep "[0-9]" test_rule.txt   //匹配任意一个数字

  ③# grep "^[a-z]" test_rule.txt  //匹配用小写字母开头的行。

  ④# grep "^[^0-9]" test_rule.txt //匹配以非数字开头的行

(5)“\”转义符

  ①# grep "\.$" test_rule.txt  //匹配以“.”结尾的行

(6)“\{n\}”表示其前面的字符恰好出现n次。

  ①# grep "a\{3\}" test_rule.txt  //匹配a字母连续出现3次的字符串,因正则是包括匹配,只要字符串中有3个连续的a则匹配。

  ②# grep "[0-9]\{3\}" test_rule.txt  //匹配包含连接3个数字的字符串

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

  # grep "^[0-9]\{3,\}[a-z]" test_rule.txt  //匹配最少用连续3个数字开头的行。

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

  # grep "sa\{1,3\}i" test_rule.txt //匹配在字母s和i之间最少一个a最多3个a

第10章 Shell编程(1)_正则表达式的更多相关文章

  1. 第10章 Shell编程(2)_字符截取命令

    2. 字符截取命令 2.1 cut字段提取命令(grep提取行,cut提取列) (1)cut命令:#cut [选项] 文件名 选项: -f 列号:提取第几列: -d 分隔符:按照指定分隔符分割列,默认 ...

  2. 第10章 Shell编程(4)_流程控制

    5. 流程控制 5.1 if语句 (1)格式: 格式1 格式2 多分支if if [ 条件判断式 ];then #程序 else #程序 fi if [ 条件判断式 ] then #程序 else # ...

  3. 第10章 Shell编程(3)_字符处理命令和条件判断

    3. 字符处理命令 3.1 排序命令:sort (1)sort命令:#sort [选项] 文件名 选项 作用 -f 忽略大小写 -n 以数值型进行排序,默认使用字符串型排序 -r 反向排序 -t 指定 ...

  4. linux 10 -Bash Shell编程

    二十三. Bash Shell编程:     1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...

  5. 10、shell编程+流程控制+分支嵌套

    SHELL 编程     shell 是一个命令解释器,侦听用户指令.启动这些指令.将结果返回给用户(交互式的shell)     shell 也是一种简单的程序设计语言.利用它可以编写一些系统脚本. ...

  6. Linux系统shell编程自学_第一章基础

    第一章 基础shell的优势在于处理操作系统底层的业务,Python,php的优势在于开发运维工具,web界面的管理工具以及web业务开发.处理一键安装.优化.报警脚本shell又叫命令解释器,它能识 ...

  7. shell编程值之正则表达式与字符截取(6)

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

  8. shell编程基础(五): 正则表达式及其使用

    正则表达式 1.前情提要 以前我们用grep在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义.其实grep还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合xxxx ...

  9. Java面向对象笔记 • 【第10章 Swing编程初级应用】

    全部章节   >>>> 本章目录 10.1 JFrame窗口容器 10.1.1 Swing介绍 10.1.2 JFrame窗口容器应用 JFrame常用方法 10.1.3 实践 ...

随机推荐

  1. 非关系型数据库来了,CRL快速开发框架升级到版本4

    轮子?,我很任性,我要造不一样的轮子,同时支持关系型和非关系型的框架有没有 新版数据查询作了些调整,抽象了LabmdaQueryy和DBExtend,升级到版本4,非关系数据库MongoDB被支持了! ...

  2. PHP_环境配置_python脚本_2017

    Apache配置 需要安装:VC2015 httpd-2.4.16-win32-VC14.zip VC14就是2015的环境. 又比如:php-5.6.12-Win32-VC11-x86 VC11就是 ...

  3. IOS 封装功能和逻辑思想

    在ios开发中,难免会用到helper的思想.这篇就简单讲解下关于helper的简单实用方法. 假设我们要做一个这样的界面: 会议分为四种情况: 未召开 正在召开 已结束 已取消 再看看逻辑关系: 编 ...

  4. 制作自己的MVC框架(二)——启动

    自己写了个框架,取名为“PrimusPHP”,就3个文件夹,log中是日志文件,会自动生成. app中就是控制器和视图,public中是入口文件和静态资源,library中既有框架的核心类,还有工具类 ...

  5. 剖析并利用Visual Studio Code在Mac上编译、调试c#程序

    0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很 ...

  6. MFC&Halcon之实时视频监控

    上一篇实现了在MFC的窗体内显示图片,本篇介绍如何在MFC窗体内实时显示摄像头的影像. 要实现的功能是点击一个“开始”按钮,可以显示影像,再点击“停止”按钮,可以停止显示. 因为实时显示影像需要在一个 ...

  7. 五步掌握OOM框架AutoMapper基本使用

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址 www.cnblogs.com/tdws  写在前面 OOM顾名思义,Object-Object-Mapping实体间相互转换,Aut ...

  8. C# 之 EXCEL导入导出

    以下方式是本人总结的一些经验,肯定有很多种方法,在此先记下,留待以后补充... 希望朋友们一起来探讨相关想法,请在下方留言. A-1:EXCEL模板导出 非常简单,将EXCEL模板上传到项目中后,将其 ...

  9. java web学习总结(三十) -------------------JSTL表达式

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...

  10. Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)

    写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...