当前位置: 首页 > news >正文

RHCE---正则表达式

文章目录

  • 目录

    文章目录

    前言

    一. 文本搜索工具

     二.正则表达式  

    元字符 

     ^行首与$行尾

     点(.) 与星号(*)

     扩展正则

    总结


前言

正则表达式是文本三剑客中及其重要的一环,称之为灵魂也不为过,到底什么是正则表达式呢,让我们一起来了解以下!


一. 文本搜索工具

  • grep是linux中一种强大的文件搜索过滤工具,可以按照正 则表达式检索文件内容,并把匹配的结果显示到屏幕上 (匹配的内容会标红)
  • grep可以在一个或多个文件中检索,如果条件 中包含了空格,需要使用双引号引起 工作结果:如果搜索成功则返回0状态码,否则为1状态码

格式:

grep   -参数   "条件" 文件名   参数:
-i     忽略大小写
-c     统计匹配的行数
-v     取反,不显示匹配的行
-w 匹配单词
-E 等价于egrep,即启用扩展正则表达式
-n 显示行号
-rl 将指定目录内的文件打印
-A数字   匹配行及以下n行
-B数字   匹配行及以上n行
-C数字   匹配行及上下n行
-q 静默模式,没有任何内容输出,使用$?来判断是
否执行成功
-o     只显示匹配的内容

案列:

 案例:检索不能登录的账号名

[root@server ~]# grep -n "/sbin/nologin" /etc/passwd
#检索能登录的使用grep -vn
  •  #检索文件中包含sshd的行及以上5行
[root@timeserver ~]# grep -nB5 "sshd" /etc/passwd

  •  检索  文件系统信息中 / 目录 
[root@timeserver ~]# df -h | grep "/"

  •  #grep是能进行模糊匹配,精确匹配需要使用-w
#grep是能进行模糊匹配,精确匹配需要使用-w
[root@timeserver ~]# df -h | grep -w  "/"

  • #-o参数只显示匹配的内容
#-o参数只显示匹配的内容
[root@timeserver ~]# df -h | grep -wo  "/"
/

 二.正则表达式  

  •  在Shell脚本中,正则表达式是一种强大的文本处理工具,用于匹配、搜索和替换字符串

元字符 

元字符作用
.(点号)匹配任意一个字符
*匹配前面的字符0次或多次
{m,n}

将前一项字符重复匹配m-n次

?匹配前一个字符出现0次或1次。
^匹配字符串的开头。
$匹配字符串的结尾。
[]匹配字符[]集中的任意一个字符
[^]匹配除字符集中的任意一个字符以外的字符。^[]:以...开头
()表示一个子表达式,可以用于分组、捕获或引用。

词首【\或\b】 和词尾锚定【\>或者\b】

用于界定边界,仅匹配锚定词之间的内容

\用于转义元字符或特殊字符

POSIX字符类 

  • [:alnum:] 匹配任意字母或数字。
  • [:alpha:] 匹配任意字母。
  • [:blank:] 匹配空格或制表符。
  • [:cntrl:] 匹配控制字符。
  • [:digit:] 匹配数字。
  • [:graph:] 匹配非空白字符。
  • [:lower:] 匹配小写字母。
  • [:print:] 匹配任意可打印字符。
  • [:punct:] 匹配标点符号。
  • [:space:] 匹配任意空白字符。
  • [:upper:] 匹配大写字母。
  • [:xdigit:] 匹配十六进制数字。

案例:[ab] : 检索包含a或包含b的行信息,[ ] 中只能表示一个内容

# 检索包含d或者D的行信息
[root@server ~]# grep -n [dD] /etc/passwd

案例:[^ ] : 根据关键字检索后反向显示(反向着色)

# 检索不包含字母o的行信息
[root@server ~]# grep -n [^o] /etc/passwd
# 检索不以r开头且包含oot的行信息
[root@server ~]# grep -n [^r]oot /etc/passwd

  •  [-] : 表示范围,如:[0-9] [a-z] [A-Z] [a-zA-Z]
# 检索包含7-9的行信息
[root@server ~]# grep -n [7-9] /etc/passwd

# 检索包含数字和字母的行信息
[root@server ~]# grep -n [0-9a-zA-Z] /etc/sos/sos.conf 
  •  ^行首与$行尾

    # 检索root开头的行信息
    [root@server ~]# grep -n ^root /etc/passwd
    

  •  检索以"[" 开头的行信息
# 检索以"[" 开头的行信息
[root@server ~]# grep -n "^\[" /etc/sos/sos.conf 

注意: 需要过滤元字符时需要加 / 进行转译,去除元字符在正则中的功能,变为普通字符

  • 检索空白行
[root@server ~]# grep -n "^$" /etc/sos/sos.conf
  •  # 检索以r开头或o开头或t开头,独立对待
[root@server ~]# grep -n ^[root] /etc/passwd
  •  点(.) 与星号(*)

  • # 检索以r开头t结尾中间只有2个字符的行信息  
[root@server ~]# grep -n r..t /etc/passwd
#..代表任意两个字符
  •  # 检索至少包含1个w字母的行信息
[root@server ~]# grep -n ww* /etc/passwd
#*会对左边的字符重复匹配0次或多次
#写两个ww为了防止*对左边的字符匹配0次

[] :任意匹配

  • 案列:过滤文件中数字的前三位数
[root@timeserver ~]# grep -n "[1-9][0-9][0-9]" /etc/passwd
#该命令默认使用模糊匹配,仅匹配文件中数字的前三位,因此下图会过滤出65534,
#需要增加参数 -w 进行精确匹配

 {m,n} 重复匹配

     当需要匹配更多位数时(7位),上述命令需要重复写7次[0-9],命令过于繁琐,为简化命令

使用范围匹配:{m,n}:将前一项字符重复匹配m-n次。

  •   匹配文件中的三位或四位数
[root@timeserver ~]# grep -nw  "[0-9]\{3,4\}" /etc/passwd
#使用范围匹配时花需要将{}转译:花括号左边加\

锚定字符精确匹配

上述案列中使用参数 -w 进行精确匹配 。

精确匹配的另一种方式:使用锚定词:用于界定边界,仅匹配锚定词之间的内容 。

案例:检索三位数或四位,个位-千位数字取值范围是0-9

[root@timeserver ~]# grep -n "\<[0-9]\{3,4\}\>" /etc/passwd

 [:space:] 匹配空白字符

  • 案列: 检索至少一个空白字符
[root@timeserver ~]# egrep -n "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg 
#+:对前面的字符匹配一次或多次 ^[]:以...开头 [^ ]:不以...开头 扩展正则表达式需用egrep

  • 案列:检索"listen"后跟0个或多个空白行结尾的信息 
[root@timeserver ~]# netstat -tan | grep "LISTEN[[:space:]]*$"

 

 扩展正则

?将前一项字符进行0次或者1次的重复匹配
+将前一项进行1次或者多次的重复匹配
(|)匹配|符号左边或者右边的字符
  •  使用扩展正则表达式是,需要添加参数grep -e 或 使用egrep
     
  •  显示文件中root sshd chrony 的相关信息
egrep -n "(root|sshd|chrony)" /etc/passwd 

  • 过滤/etc/yum.repos.d/中的基名字(绝对路径中最后的文件名)
  • [root@timeserver ~]# echo  /etc/yum.repos.d/ | egrep -o  [^/]+/?$
    #参数:-o :只显示红色匹配项

综合案列 

过滤 IP 地址

[root@timeserver ~]# ifconfig ens160 | egrep "([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"


总结

http://www.lryc.cn/news/212299.html

相关文章:

  • 3D RPG Course | Core 学习日记一:初识URP
  • Spring Cloud 之RabbitMQ的学习【详细】
  • 第五章 I/O管理 六、I/O核心子系统
  • winfrom窗体比例缩放
  • 宇信科技:强势行业加速融入AIGC,同时做深做细
  • Google Play上的Android广告软件应用程序积累了200万次安装
  • 算法通关村第四关-黄金挑战栈的经典问题
  • 前端开发必备技能!用简单CSS代码绘制三角形,提升用户体验
  • 想翻译pdf文档,试了几个工具对比:有阿里(完全免费,快,好用,质量高,不用注册登录)道最好(有限免费) 百度(有限免费)和谷歌完全免费(网不好)
  • c# .net linux ImageSharp+FastDFS+Base64上传图片,压缩图片大小,图像处理dcoker中使用也可以
  • Flutter FittedBox
  • 亚信科技:发挥自我优势深入AIGC,并购整合高瞻远瞩致力未来路
  • 【设计模式】第17节:行为型模式之“解释器模式”
  • 各传输介质详细知识点
  • 历史随想随记
  • ClickHouse Java多个参数的UDF编写
  • RPA除了和OCR、NLP技术结合,还能和什么技术结合?
  • AssertionError: Torch not compiled with CUDA enabled
  • 【Ubuntu 系统使用进入,自动进入base虚拟环境解决最全】
  • C++项目——云备份-⑨-服务端与客户端功能联调
  • Linux两条服务器实现相互免密登录
  • 华纳云Ubuntu环境怎么编译安装PHP和Nginx
  • Ubuntu 23.10(Mantic Minotaur)正式发布,支持Linux 6.5和GNOME 45
  • Linux:KVM虚拟化
  • HTML标签,列表,表格相关
  • 【音视频】Linux | FFmpeg源码搭建
  • Ansible中常用模块
  • 2000-2021年上市公司产融结合度量数据
  • 2023最新最全Web自动化测试面试题
  • List的add(int index,E element)陷阱,不得不防