Linux基础之正则表达式
大家好,又见面了,我是你们的朋友全栈君。
正则表达式:又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
我们可以使用 grep 命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一行,并将至少有一处匹配表达式的所有行显示出来。
grep 命令说明:
常用的选项OPTION:
-c 显示匹配到的行数之和
-o 仅显示匹配本身
-v 显示非匹配,取反
-i 不区分大小写
-E 支持扩展表达式
-q 静默模式
-n 显示匹配到的行的行号
-A 2 显示匹配到的行的后2行
-B 2 显示匹配到的行的前2行
-C 2 显示匹配到的行的前后2行
-V 显示版本信息
使用语法:
grep [OPTION]… PATTERN [FILE]…
grep “[匹配字符]匹配出现次数” /PATH/TO/SOMEFILE
字符匹配:
. 任意单个字符
[] 指定范围内的单个字符
[^] 指定范围外的的单个字符,取反
.* 任意长度的任意字符
[:alnum:] 所有的字母和数字
[:alpha:] 所有的字母
[:blank:] 所有呈水平排列的空白字符
[:cntrl:] 所有的控制字符
[:digit:] 所有的数字
[:graph:] 所有的可打印字符,不包括空格
[:lower:] 所有的小写字母
[:print:] 所有的可打印字符,包括空格
[:punct:] 所有的标点字符
[:space:] 所有呈水平或垂直排列的空白字符
[:upper:] 所有的大写字母
[:xdigit:] 所有的十六进制数
[=字符=] 所有和指定字符相等的字符
匹配次数 :
* 其前面的字符出现任意次,0次或1次,或者多次
\? 其前面的字符出现0次或1次
\+ 其前面的字符出现1次或多次,至少出现1次
\{m\} 指定字符出现次数
\{m,n\} 至少出现m次,至多出现n次,范围取次
\{0,n\} 出现最多n次
\{m,\} 出现最少m次
位置锚定:
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^……$ 整行, ^$ 空白行,^[[:space:]]*$ 空行或者有空白字符的行
\< 或 \b 词首锚定
\> 或 \b 词尾锚定
\<……\> 精确锚定单词
分组及引用:
\{xy\}*ab 表示多个字符出现0,1或多次。 \ 在这里作为转义符使用
\(abcd\){1,3} 表示包含abcd字符串最少出现1次,最多出现3次
\(1..2\).* \1 \1 是指引用从左侧起第一个()之间的字符
\(1..2\).* \(3..4\)\2 \2 是指引用从左侧起第二个()之间的字符
\(1..2\).* \(3..4\).*\(5..6\)\3 \3 是指引用从左侧起第三个()之间的字符
使用实例:
查看显示 /etc/fstab 文件以 # 注释开头的行:
这里也可以不加【】:
-v 取反,即显示不以#注释的行,-o 选项为只显示匹配到的字符串:
显示 /etc/fstab 文件非注释的行,锚定行首为 # 注释的行,取反:
显示 /etc/fstab 文件以#号开头,后面跟一个空格,后面为任意长度任意字符的行, -c 选项可以统计匹配到的行数:
在 /tmp/fstab 文件中加入多个空白行,以#号开头,后面仅跟一个空格,且不以空白符结尾的行:
显示 /tmp/sshd_config 文件中不以#注释、空白行以及有空白字符的行:
显示 /etc/passwd 文件中用户名和用户SHELL为一样的行:
显示 /tmp 目录下,以非字母开头,后面跟一个字母,后面为任意长度任意字符的文件或者目录:
显示 /tmp 目录下以非字母开头,后面仅跟一个字母,然后以非字母结尾的文件和目录:
显示 /etc 目录下以p开头不以数字结尾的所有文件和目录:
显示 ip a 或者 ifconfig 命令中的IP地址,-E 选项为支持扩展正则表达式:
-l 选项可以列出包含字符串的文件列表:
-w 精确锚定字符串,相当于\<…|> :
egrep 的使用方法跟 grep 基本一致,不需要转义符 \ 看起来更简洁:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158715.html原文链接:https://javaforall.cn
相关文章
- Linux中快速删除文件夹的方法(linux快速删除文件夹)
- 探索Linux内核进程的真实面貌(linux查看内核进程)
- Linux下查看当前权限的方法(linux查看当前权限)
- Linux系统入门必备:精彩PPT让你快速掌握基础知识(linux基础入门ppt)
- Linux操作系统价格:一看便知(linux操作系统报价)
- 从零开始,学习Linux运维(0基础linux运维)
- Linux 磁盘构成:基础技术概述(linux磁盘组成)
- Linux入门:掌握最基础的知识(linux入门知识)
- Linux中添加用户及设置密码(linux添加用户密码)
- Linux汇编:完美处理复杂任务的武器(linux汇编工具)
- 深入理解 Linux 下的正则表达式(正则表达式linux)
- 开启Linux新旅程:基础配置指南(linux基本配置)
- 学习Linux:基础知识是必不可少的(学linux需要什么基础)
- 地址Linux下查询网关地址的方法(linux查询网关)
- 系统Linux的分支:开放的发行版与革新(linux的分支)
- Linux分支:丰富多样的操作系统选择(linux的分支)
- Linux内核文件研究(core文件linux)
- Linux下使用正则表达式删除文件(linux正则删除文件)
- 掌握Linux系统及编程基础,展现你的技能(linux系统及编程基础)
- Linux系统如何正确安装JDK?(jdk在linux下安装)
- 红帽Linux基础:25个实用命令快速上手(红帽linux常用命令)
- Linux开启外网端口:一步一步安全搭建(linux开启外网端口)
- 管理Linux统一管理:实现更高效的管理效率(linux统一)
- 掌握入门级别Linux基础操作:登录Linux命令(登录linux命令)
- Linux系统自动注销:满足安全需求(linux 自动注销)
- 探究Linux下的最大限制,了解系统架构与管理的基础规则(linux 最大限制)