LinuxShell——正则表达式

摘要:本文主要学习了Shell中的正则表达式。

简介

含义

正则表达式,也称作正规表示法,是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割、匹配、査找及替换操作。

正则表达式是用来匹配文件中的字符串的方法,它会先把整个文本分成一行一行的字符串,然后从每行字符串中搜索是否有符合正则表达式规则的字符串,如果有则匹配成功,如果没有则匹配失败。

正则表达式和通配符的区别

正则表达式用来在文件中匹配符合条件的字符串,通配符用来匹配符合条件的文件名。其实这种区别只在Shell中适用,因为用来在文件中搜索字符串的命令,如grep、awk、sed等可以支持正则表达式,而在系统中搜索文件的命令,如ls、find、cp等不支持正则表达式,所以只能使用Shell自己的通配符来进行匹配了。

语系对正则表达式的影响

不同环境下语系不同,可能使用正则表达式选取的结果也会有所差异。

使用之前设置语系:

 [root@localhost ~]# export LANG=C
[root@localhost ~]# export LC_ALL=C

元字符

在正则表达式中,我们把用于匹配的特殊符号又称作元字符。在Shell中,元字符又分为基础元字符和扩展元字符。

基础元字符

 *:前一个字符匹配0次或任意多次。
.:匹配除换行符外的任意一个字符。
^:匹配行首。例如:^hello会匹配以hello开头的行。
$:匹配行尾。例如:hello&会匹配以hello结尾的行。
[]:匹配中括号里的任意一个字符,而且只匹配一个字符。例如:[aoeiu]匹配任意一个元音字母,[-]匹配任意一位数字,[a-z][-]匹配由小写字母和一位数字构成的两位字符。
[^]:匹配除了中括号里的字符以外的任意一个字符。例如:[^-]匹配任意一位非数字字符,[^a-z]匹配任意一位非小写字母。
\:转义符,用于取消特殊符号的含义。
\{n\}:表示其前面的字符恰好出现n次。例如:[-]\{\}匹配4位数字,[][-][-]\{\}匹配手机号码。
\(n,\}:表示其前面的字符出现不少于n次。例如:[-]\{,\}匹配两位及以上的数字。
\{n,m\}:表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{,\}匹配6到8位的小写字母。

1)*

正则表达式中的“*”和通配符中的“*”含义不同,正则表达式中的代表前一个字符重复0次或任意多次。

举例:

“a*”并不是匹配a后面的任意字符,而是可以匹配所有内容,包括空白行,所以“a*”是没有意义的。

“aa*”会匹配至少包含一个a的字符串。

“a*b”并不能匹配a和b之间有任意字符的字符串,只能匹配包含了b的字符串。

2).

正则表达式中的“.”只能匹配一个字符,这个字符可以是任意字符。

举例:

“a.b”会匹配a和b之间有一个字符的字符串。

“a.*b”会匹配a和b之间有任意字符的字符串。

3)^

正则表达式中的“^”代表匹配行首。

举例:

“^M”会匹配以“M”开头的行。

4)$

正则表达式中的“$”代表匹配行尾。

举例:

“n$”会匹配以“n”结尾的行。

5)[]

正则表达式中的“[]”会匹配中括号里指定的任意一个字符,注意只能匹配一个字符。

举例:

“[ao]”要么匹配一个a字符,要么匹配一个o字符。

“[A-Z]”会匹配任意一个大写字母。

6)[^]

正则表达式中的“[^]”会匹配除了中括号里的字符以外的任意一个字符。

举例:

“^[^a-zA-Z]”会匹配不以字母开头的行。

7)\

转义符会取消特殊符号的含义,将其作为正常的字符串来匹配。

举例:

“.$”不能匹配使用.结尾的行,因为.有特殊含义,可以使用“\.$”来匹配使用.结尾的行。

8)\{n\}

正则表达式中的“\{n\}”表示其前面的字符恰好出现n次。

举例:

“a\{3\}”会匹配a字母连续出现3次的字符串,但不会限制之后的字符串,当然也会匹配到“aaaa”。

“a\{3\}[^a]”会匹配a字母连续出现3次的字符串,并且之后不为a的字符串,也就是只匹配a字母连续出现3次的字符串。

9)\{n,\}

正则表达式中的“\{n,\}”表示其前面的字符出现不少于n次。

举例:

“^[0-9]\{3,\}”会匹配最少连续3个数字开头的字符串。

10)\{n,m\}

正则表达式中的“\{n,m\}”表示其前面的字符出现不少于n次,不超过m次。

举例:

“ao\{1,3\}e”会匹配在字母a和字母e之间最少1个、最多3个的o字符串。

扩展元字符

在正则表达式中还有一些元字符,被称为扩展元字符。有的命令支持这种元字符,比如awk命令,有的命令不支持这种元字符,比如sed命令和grep命令。

 +:前一个字符匹配1次或任意多次。例如:a+b匹配以a开始以b结尾的字符串。
?:前一个字符匹配0次或1次。例如:a?b匹配ab或者b。
|:匹配两个或多个分支选择。例如:a|b|c匹配a或者b或者c。
():匹配其整体为一个字符,即模式单元。可以理解为由多个单个字符组成的大字符。例如:(abc)+会匹配重复abc这个整体一次或多次的字符串。

LinuxShell——正则表达式的更多相关文章

  1. Linux--shell脚本之正则表达式

    一.正则表达式的概念及特点: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑.规 ...

  2. Linux--shell grep与正则表达式--04

    一.grep程序 Linux下有文本处理三剑客:grep.sed.awk grep:文本 行过滤工具 sed:文本 行编辑器(流编辑器) awk:报告生成器(做文本输出格式化) 1.grep grep ...

  3. 脚本学习python和linux-shell和jQuery(javascript)

    使用脚本可以方便管理,使用计算机. 打算学脚本来更好地用计算机系统,特别是Linux. 学python因为它开源,而且是C家族的语言,本来也是课程需要,再加上它确实很好,所以非常主打,之前看过perl ...

  4. 程序员必知的LinuxShell命令

    程序员必知的LinuxShell命令 grep (Globle Regular Expression Print全局正则表达式) 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的 ...

  5. LinuxShell脚本——循环结构

    LinuxShell脚本——循环结构 摘要:本文主要学习了Shell脚本中的循环结构. while循环 基本语法 while循环是最简单的一种循环,如果条件满足则执行循环里的语句,如果条件不满足则退出 ...

  6. LinuxShell脚本——选择结构

    LinuxShell脚本——选择结构 摘要:本文主要学习了Shell脚本中的选择结构. if-else语句 基本语法 最简单的用法就是只使用if语句,它的语法格式为: if 条件 then 命令 fi ...

  7. LinuxShell——管道命令

    LinuxShell——管道命令 摘要:本文主要学习了Shell中的管道命令. grep命令 grep命令的作用是在文件中提取和匹配符合条件的字符串行,全称是Global Regular Expres ...

  8. Linuxshell脚本-格式-变量-条件测试

    1.Linuxshell脚本格式 脚本文件名称格式: 1.NAME.sh.脚本文件名称必须以 .sh 结尾 脚本编辑第一行必须包括shell声明序列:#! 添加注释,注释以#开头     2.加3执行 ...

  9. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

随机推荐

  1. Shadow broker=>fuzzbunch+metasploit 攻击外网测试以及metasploit大批量扫描目标IP

    0x01 前言 4月14日,影子经纪人在steemit.com上公开了一大批NSA(美国国家安全局)“方程式组织” (Equation Group)使用的极具破坏力的黑客工具,其中包括可以远程攻破全球 ...

  2. 剑指offer 16:反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 解题思路 单链表原地反转是面试手撕代码环节非常经典的一个问题.针对一般单链表,反转的时候需要操作的是当前节点及与之相邻的其他两个节点.因而需要定 ...

  3. 模板引擎Jinja2的基本用法

    Flask提供的模板引擎为Jinja2,易于使用,功能强大.模板仅仅是文本文件,它可以生成任何基于文本的格式(HTML.XML.CSV.LaTex 等等). 它并没有特定的扩展名, .html 或 . ...

  4. Odoo12 之主题创建或扩展

    初次使用 Odoo 来制作网站,因Odoo自带代码块效果单一,无法满足当前网站展示效果,需要对当前代码块进行添加或扩展.而这个代码块是属于网站中的布局设计这一块,Odoo 将所有的布局以及逻辑行为,都 ...

  5. JDBC API浅析

    使用java开发数据库应用程序一般都需要用到四个接口:Driver.Connection.Statement.ResultSet 1.Driver接口用于加载驱动程序 2.Connection接口用于 ...

  6. svn 在Windows下用TortoiseSVN checkout 时报认证错误

    TortoiseSVN 第一次 checkout(检出)时,需要输入用户名密码,如果第一次你保存了你的用户名密码,那么这个检出的项目以后就会用这个用户名密码,如果你的密码改了之后,就会报一个认证错误的 ...

  7. Java面试题-基础篇二(干货)

    11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...

  8. oracle并行模式

    参考链接:oracle并行模式(Parallel),深入理解Oracle的并行操作(原创),oracle使用并行踩过的坑 1. 语法(这个可以加到insert.delete.update.select ...

  9. Jmeter怎么搭建环境

    1.JDK检查与安装 cmd输入命令:java -version   -- 检查主机是否安装了JDK JDK下载官网:https://www.oracle.com/technetwork/java/j ...

  10. 深度工作(Charlotte)

    作者:Charlotte文章转自:https://zhuanlan.zhihu.com/p/56719363 为什么要深度工作? 作为一名程序员/媛,工作时长动则十几小时,然而有的人效率奇高,有的人上 ...