Linux基础之正则表达式


junwei
均未 2022-09-27 09:54:47 56092
分类专栏: 资讯

正则表达式:又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):

2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

我们可以使用 grep 命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一行,并将至少有一处匹配表达式的所有行显示出来。

grep 命令说明:

常用的选项OPTION:

  1. -c 显示匹配到的行数之和
  2. -o 仅显示匹配本身
  3. -v 显示非匹配,取反
  4. -i 不区分大小写
  5. -E 支持扩展表达式
  6. -q 静默模式
  7. -n 显示匹配到的行的行号
  8. -A 2 显示匹配到的行的后2行
  9. -B 2 显示匹配到的行的前2行
  10. -C 2 显示匹配到的行的前后2行
  11. -V 显示版本信息

使用语法:

grep [OPTION]... PATTERN [FILE]...

grep "[匹配字符]匹配出现次数" /PATH/TO/SOMEFILE

字符匹配:

  1. . 任意单个字符
  2. [] 指定范围内的单个字符
  3. [^] 指定范围外的的单个字符,取反
  4. .* 任意长度的任意字符
  5. [:alnum:] 所有的字母和数字     
  6. [:alpha:] 所有的字母
  7. [:blank:] 所有呈水平排列的空白字符
  8. [:cntrl:] 所有的控制字符
  9. [:digit:] 所有的数字
  10. [:graph:] 所有的可打印字符,不包括空格
  11. [:lower:] 所有的小写字母     
  12. [:print:] 所有的可打印字符,包括空格
  13. [:punct:] 所有的标点字符 
  14. [:space:] 所有呈水平或垂直排列的空白字符
  15. [:upper:] 所有的大写字母   
  16. [:xdigit:] 所有的十六进制数
  17. [=字符=] 所有和指定字符相等的字符

匹配次数 :

  1. * 其前面的字符出现任意次,0次或1次,或者多次
  2. \? 其前面的字符出现0次或1次
  3. \+ 其前面的字符出现1次或多次,至少出现1次
  4. \{m\} 指定字符出现次数
  5. \{m,n\} 至少出现m次,至多出现n次,范围取次 
  6. \{0,n\} 出现最多n次         
  7. \{m,\} 出现最少m次

位置锚定:

  1. ^ 行首锚定,用于模式的最左侧 
  2. $ 行尾锚定,用于模式的最右侧
  3. ^……$ 整行, ^$ 空白行,^[[:space:]]*$  空行或者有空白字符的行
  4. \< 或 \b  词首锚定
  5. \> 或 \b  词尾锚定
  6. \<……\>  精确锚定单词

分组及引用:

  1. \{xy\}*ab     表示多个字符出现0,1或多次。 \ 在这里作为转义符使用
  2. \(abcd\){1,3} 表示包含abcd字符串最少出现1次,最多出现3次
  3. \(1..2\).* \1      \1 是指引用从左侧起第一个()之间的字符
  4. \(1..2\).* \(3..4\)\2    \2 是指引用从左侧起第二个()之间的字符
  5. \(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 基本一致,不需要转义符 \ 看起来更简洁:

 

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux17938 人正在系统学习中

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=10606
赞同 0
评论 0 条
均未L0
粉丝 0 发表 9 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2944
【软件正版化】软件正版化工作要点  2863
统信UOS试玩黑神话:悟空  2823
信刻光盘安全隔离与信息交换系统  2717
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1251
grub引导程序无法找到指定设备和分区  1217
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  163
点击报名 | 京东2025校招进校行程预告  162
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  160
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  157
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!