详解Linux命令中的正则表达式

命令中的正则表达式

如果要在命令输出或文本中筛选内容时使用模糊查找,就需要使用正则表达式。正则表达式是一套由多个元字符组成的模糊查找模式,使用正则表达式可以快速查找和定位文本中指定的内容。

1、单字符匹配符. 

正则表达式主要由一些元字符和匹配模式组成

单字符匹配符可以匹配任意单个字符,这个字符的功能和文件名匹配符中的?功能相同

使用正则表达式查找文本,首先需要使用元字符组成一个查找模式

(1)使用查找模式时,通常将其放入两个斜杠//中,然后再放入命令,例如要在一个文本中查找匹配模式/.i...../,可能选项就有:只要小写字母没有出现在行首,或行尾的最后有5个字符都能匹配

 2、单字符或字符串重复匹配符* 

用来匹配单个字符或者一个字符串序列的一次或者多次重复出现

 3、行首匹配符^

用于在匹配中指示行首位置字符串或者模式,使用时需要将行首匹配符放在要匹配的字符串或模式的前面

例如对命令ls -1 使用行首匹配/^1/,结果都是以1开头的

 4、行尾匹配符$ 

用于在文本的每一行的行尾匹配字符串或模式,使用时将行尾匹配符放在字符串或模式后面

例如在文本中匹配所有行尾是love的行

/love$/

 5、反斜杠屏蔽符\ 

该符用来屏蔽一些特殊字符的特殊含义,常见的特殊字符可能是引用符号,注释符号,通配符和逻辑运算符等,下面列举一些特殊的符号

注释、分隔符号:#、;等

引用符号:$、``、""等

元字符:.、*、^、$、?、[]、\等

逻辑运算符或操作符:||、&&等

在命令中使用这些字符时,都要使用反斜杠将其特殊含义屏蔽

例如使用乘法符号*做乘法运算,就要用反斜杠将其特殊含义屏蔽在做使用

# expr 256 \* 256

 6、范围匹配符[]和排除范围匹配符[^]

与文件名通配符中的范围匹配符用法基本相同

(1)匹配单词love和Love:

/[L]ove/

(2)不匹配所有的字母:

[^a-z]

7、词首、词尾匹配符 \< 和 \> 

用于在单词开头和单词结尾匹配特定的字符或模式

(1)例如要匹配以disc 为词首的文本,可以使用

/\<disc/

(2)要匹配以ment为词尾的文本,可以使用:

/ment\>/

 8、重复次数匹配符"x\{\}"

可以全精确匹配字符或字符串连续出现的次数或次数范围

(1)要匹配字母m出现次数为5次的文本,可以使用:

/m\{5\}/

(2)要匹配字母m出现次数至少5次的文本,可以使用:

/m\{5,\}/

(3)匹配字母m出现次数在5至10次的文本,可以使用:

/m\{5,10\}/

 9、组合并使用正则表达式

(1)在查找和筛选信息时,有时需要去除文本中的空行,由于空行没有任 何字符,可以使用行首,行尾匹配符匹配空行

/^$/

(2)有时一些文本为了看上去更加美观,会使用一种字符填充整行,可以使 用以下模式匹配这些行:

/^.*$/

(3)匹配以the或The开头的所有行

/^[tT]he/

(4)排除以the和The开头的所有行

/^[^Tt]he/

(5)匹配一个IP地址:

/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/

(6)匹配一个6个字母组成的字符串,前两个字符是字母,中间两个字符是22 且最后两个字符是小写字母:

[a-z]\{2\}22[a-z]\{2\}

(7)要精确匹配单词love:

/\<love\>/

以上所述是小编给大家介绍的详解Linux命令中的正则表达式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持

时间: 2017-01-31

Linux基础之正则表达式,用户、组管理命令介绍

通配符(Globbing) 通配符与元字符类似,通配符主要用于文件名的匹配,而元字符则主要用在字符串的匹配上: 下面介绍几种常用的通配符: * 表示匹配任意位数的任意字符 ? 表示匹配一位任意字符 ^ 表示取反,不包含的意思 [] 表示此区间内的任意一个字符 {} 表示一种集合 \ 转义字符,使具有特殊意义的字符失去原有意义 | 表示'或',匹配一组可选的字符 元字符 元字符是用来描述字符的特殊字符. 常用的元字符及意义如下: * 重复前面的字符0次或者多次 . 匹配任意字符一次 \+ 匹配前面

详解基于Linux下正则表达式(基本正则和扩展正则命令使用实例)

前言 正则表达式应用广泛,在绝大多数的编程语言都可以完美应用,在Linux中,也有着极大的用处. 使用正则表达式,可以有效的筛选出需要的文本,然后结合相应的支持的工具或语言,完成任务需求. 在本篇博客中,我们使用grep/egrep来完成对正则表达式的调用,其实也可以使用sed等工具,但是sed的使用极大的需要正则表达式,为了在后面sed篇的书写,就只能这样排序了,有需要的朋友可以把这两篇一起来看. 正则表达式的类型 正则表达式可以使用正则表达式引擎实现,正则表达式引擎是解释正则表达式模式并使用

详解在Linux下9个有用的touch命令示例

touch 命令用于创建空文件,也可以更改 Unix 和 Linux 系统上现有文件时间戳.这里所说的更改时间戳意味着更新文件和目录的访问以及修改时间. 让我们来看看 touch 命令的语法和选项: 语法: # touch {选项} {文件} touch 命令中使用的选项: 在这篇文章中,我们将介绍 Linux 中 9 个有用的 touch 命令示例. 示例:1 使用 touch 创建一个空文件 要在 Linux 系统上使用 touch 命令创建空文件,键入 touch ,然后输入文件名.如下所

详解在Linux下搭建Git服务器

众所周知,版本系统在开发环境中是必不可少的,但是我们可以把代码免费的托管到GitHub上,如果我们不原意公开项目的源代码,公司又不想付费使用,那么我们可以自己搭建一台Git服务器,可以用Gitosis来管理公钥,还是比较方便的. 搭建环境: 服务器 CentOS6.6 + git(version 1.8.3.1) 客户端 Windows10 + git(version 2.11.1.windows.1) 1. 安装Git相关软件 Linux是服务器端系统,Windows作为客户端系统,分别安装G

详解基于Linux的LVM无缝磁盘水平扩容

环境 名称 属性 CPU x5650 内存 4G 磁盘 20G+4TB 这时候,我们假设服务器已经有如下东西: 安装好了Parted(yum install parted) 分区容量已经告捷,公司为服务器增加了一块4T硬盘用来增加容量! 除了/boot分区外,其余都为LVM 模式的扩展逻辑分区 软件安装与信息查看 首先查看软件是否安装: [root@Candy ~]# rpm -qa | grep lvm lvm2-libs-2.02.118-2.el6.x86_64 lvm2-2.02.118

详解Centos/Linux下调整分区大小(以home和根分区为例)

在安装新系统的时候,有时候没法预估或者说错误的划分了分区大小,常常会导致我们后面的操作出现极大地不方便,比如某个分区分的太小了,导致软件安装的时候会报安装空间不够,这就很麻烦.在这里我就记录一下错误分区后对home和根分区存储空间大小调整的整个过程! 1.查看我们机器现有的分区状况 注意红色框中的信息,这是我们后面要更改的分区路径.通过上面我们可以发现根分区和home分区产生极大的不合理性,home分区太大了,所以这里我们将对home分区缩小存储空间并把压缩的存储空间添加到root下面. 2.卸

详解 MAC/Linux Vi配置环境变量及Java环境变量配置

详解 MAC/Linux Vi配置环境变量及Java环境变量配置 vi基础 1.vi的基本概念 (1)基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: 1) 命令行模式command mode) 控制屏幕光标的移动,字符.字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode. 2) 插入模式(Insert mode) 只有在Ins

mysql数据库详解(基于ubuntu 14.0.4 LTS 64位)

1.mysql数据库的组成与相关概念 首先明白,mysql是关系型数据库,和非关系型数据库中最大的不同就是表的概念不一样. +整个mysql环境可以理解成一个最大的数据库:A +用mysql创建的数据库B是属于A的,是数据的仓库,相当于系统中的文件夹 +数据表C:是存放数据的具体场所,相当于系统中的文件,一个数据库B中包含若干个数据表C(注意此处的数据库B和A不一样) +记录D:数据表中的一行称为一个记录,因此,我们在创建数据表时,一定要创建一个id列,用于标识"这是第几条记录",id

详解基于Spring Data的领域事件发布

领域事件发布是一个领域对象为了让其它对象知道自己已经处理完成某个操作时发出的一个通知,事件发布力求从代码层面让自身对象与外部对象解耦,并减少技术代码入侵. 一. 手动发布事件 // 实体定义 @Entity public class Department implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer departmentId; @Enumerate

详解基于Mybatis-plus多租户实现方案

一.引言 小编先解释一下什么叫多租户,什么场景下使用多租户. 多租户是一种软件架构技术,在多用户的环境下,共有同一套系统,并且要注意数据之间的隔离性. 举个实际例子:小编曾经开发过一套支付宝程序,这套程序应用在不同的小程序上,当使用者访问不同,并且进入相对应的小程序页面,小程序则会把用户相关数据传输到小编这里.在传输的时候需要带上小程序标识(租户ID),以便小编将数据进行隔离. 当不同的租户使用同一套程序,这里就需要考虑一个数据隔离的情况. 数据隔离有三种方案: 1.独立数据库:简单来说就是一个

详解基于IDEA2020.1的JAVA代码提示插件开发例子

之前因为项目组有自己的代码规范,为了约束平时的开发规范,于是基于2019.1.3版本开发了一个代码提示的插件.但是在把IDEA切换到2020.1版本的时候,却发现疯狂报错,但是网上关于IDEA插件开发的相关文章还是不够多,只能自己解决.于是根据官方的SDK文档,使用Gradle重新构建了一下项目,把代码拉了过来.下文会根据2020.1版本简单开发一个代码异常的提示插件,把容易踩坑的地方提示一下. 1.首先先根据IDEA插件开发官方文档,用Gradle新建一个project 选中file -> n