RHCE——十七、文本搜索工具-grep、正则表达式
RHCE
- 一、文本搜索工具--grep
- 1、作用
- 2、格式
- 3、参数
- 4、注意
- 5、示例
- 5.1 操作对象文件:/etc/passwd
- 5.2 grep过滤命令示例
- 二、正则表达式
- 1、概念
- 2、基本正则表达式
- 2.1 常见元字符
- 2.2 POSIX字符类
- 2.3 示例
- 3、扩展正则表达式
- 3.1 概念
- 3.2 示例
- 三、作业
- 1、作业一
- 2、作业二
- 3、作业三
一、文本搜索工具–grep
1、作用
- grep是linux中一种强大的文件搜索过滤工具,可以按照正则表达式检索文件内容,并把匹配的结果显示到屏幕上(匹配的内容会标红)
2、格式
grep -参数 条件 文件名
3、参数
-i 忽略大小写
-c 统计匹配的行数
-v 取反,不显示匹配的行
-w 匹配单词
-E 等价于egrep,即启用扩展正则表达式
-n 显示行号
-rl 将指定目录内的文件打印
-A数字 匹配行及以下n行
-B数字 匹配行及以上n行
-C数字 匹配行及上下n行
-q 静默模式,没有任何内容输出,使用$?来判断是否执行成功
-o 只显示匹配的内容

4、注意
- 工作方式:grep可以在一个或多个文件中检索,如果条件中包含了空格,需要使用双引号引起
- 工作结果:如果搜索成功则返回0状态码,否则为1状态码
5、示例
5.1 操作对象文件:/etc/passwd
- 作用:记录账户的信息,共分为7段,使用冒号分割
- 意义:账户名:密码代号x:UID:GID:注释:家目录:登录的Shell
- 注意:最后一段/sbin/nologin表述不允许登录
5.2 grep过滤命令示例
[root@server ~]# grep -n "root" /etc/passwd
[root@server ~]# grep -n "sshd" /etc/passwd
[root@server ~]# grep -n "/sbin/nologin" /etc/passwd
[root@server ~]# grep -c "/bin/bash" /etc/passwd
[root@server ~]# grep "/bin/bash" /etc/passwd | wc -l
[root@server ~]# grep -nv "/sbin/nologin" /etc/passwd
[root@server ~]# grep -ni "d" /etc/passwd
[root@server ~]# grep -nA2 "ftp" /etc/passwd
[root@server ~]# grep -nB3 "ftp" /etc/passwd
[root@server ~]# grep -nC3 "ftp" /etc/passwd


二、正则表达式
1、概念
-
在进行程序设计的过程中,用户会不可避免地遇到处理某些文本的情况。有的时候,用户还需要查找符合某些比较复杂规则的字符串。对于这些情况,如果单纯依靠程序设计语言本身,则往往会使得用户通过复杂的代码来实现。但是,如果使用正则表达式,则会以非常简短的代码来完成
-
正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串,简单的说,正则表达式就是用在字符串的处理上面的一项表示式。由于正则表达式语法简练,功能强大,得到了许多程序设计语言的支持,包括Java、C++、Perl以及Shell等
2、基本正则表达式
- 基本正则表达式(Basic Regular Expression,BRE),又称为标准正则表达式,是最早制订的正则表达式规范,仅支持最基本的元字符集。基本正则表达式是POSIX规范制订的两种正则表达式语法标准之一,另外一种语法标准称为扩展正则表达式
2.1 常见元字符
| 元字符 | 说明 |
|---|---|
| ^ | 以某个字符开头 或 行首 |
| $ | 以某个字符结尾 或行尾 |
| . | 匹配任意单字符 |
| ***** | 对前一项进行0次或者多次重复匹配 |
| {m,n} | 将前一项字符重复m-n次,{m,},{,n},{m,n} |
| [] | 对方括号内的单字符进行匹配 |
| [^] | 不匹配方括号内的单字符 |
^[] | 匹配以某个字符开头的行 |
| () | 定义一个子表达式 |
| 词首【\<或\b】和词尾锚定【\>或者\b】 | 其后面的任意字符必须作为单词首部出现;其前面的任意字符必须作为单词尾部出现 |
| \ | 转义字符,让一些特殊符号失效 |
2.2 POSIX字符类
- POSIX字符类是一个形如
[:...:]的特殊元序列(meta sequence),他可以用于匹配特定的字符范围
| 正则表达式 | 描述 | 示例 |
|---|---|---|
| [:alnum:] | 匹配任意一个字母或数字字符 | [[:alnum:]]+ |
| [:alpha:] | 匹配任意一个字母字符(包括大小写字母) | [[:alpha:]] |
| [:blank:] | 空格与制表符(横向和纵向) | [[:blank:]]* |
| [:digit:] | 匹配任意一个数字字符 | [[:digit:]]? |
| [:lower:] | 匹配小写字母 | [[:lower:]] |
| [:upper:] | 匹配大写字母 | ([[:upper:]]+)? |
| [:punct:] | 匹配标点符号 | [[:punct:]] |
| [:space:] | 匹配一个包括换行符、回车等在内的所有空白符 | [[:space:]]+ |
| [:graph:] | 匹配任何一个可以看得见的且可以打印的字符 | [[:graph:]] |
| [:xdigit:] | 任何一个十六进制数(即:0-9,a-f,A-F) | [[:xdigit:]]+ |
| [:cntrl:] | 任何一个控制字符(ASCII字符集中的前32个字符) | [[:cntrl:]] |
| [:print:] | 任何一个可以打印的字符 | [[:print:]] |
2.3 示例
- [ab] : 检索包含a或者b的行信息,[]只能包含一个内容
[root@server ~]# grep -n [dD] /etc/passwd
[root@server ~]# grep -n [oo] /etc/passwd


- [^]:根据关键字反向显示(反向着色)
[root@server ~]# grep -n [^o] /etc/passwd
[root@server ~]# grep -n [^r]oot /etc/passwd


- [-]:表示范围,如:[0-9] [a-z] [A-Z] [a-zA-Z]
[root@server ~]# grep -nw [7-9] /etc/passwd
[root@server ~]# grep -n [A-Z] /etc/passwd
[root@server ~]# grep -n [A-G] /etc/passwd
[root@server ~]# grep -n [0-9A-Za-z] /etc/passwd
[root@server ~]# grep -n [[:alnum:]] /etc/sos/sos.conf




- ^行首与$行尾
[root@server ~]# grep -n ^root /etc/passwd
[root@server ~]# grep -n ^# /etc/sos/sos.conf # 检索注释行
[root@server ~]# grep -n "^\[" /etc/sos/sos.conf
[root@server ~]# grep -n "[0-9]$" /etc/sos/sos.conf
[root@server ~]# grep -n "^$" /etc/sos/sos.conf
# 注意:
[root@server ~]# grep -n ^[root] /etc/passwd # 检索以r或o或t开头的不是root开头
[root@server ~]# grep -n ^root /etc/passwd # 整体对待
[root@server ~]# grep -n [^root] /etc/passwd # 检索不包含r或不包含o或不包含t,进行反向着色,注意:^[] 与 [^] 区别



- 点(.)与星号(*)
[root@server ~]# grep -n r..t /etc/passwd
[root@server ~]# grep -n ooo* /etc/passwd
[root@server ~]# grep -n "\." /etc/passwd

- {m,n} 区间
[root@server ~]# grep -n "\<[0-9]\{2\}\>" /etc/passwd
# {m,n} 描述区间

3、扩展正则表达式
3.1 概念
- 扩展正则表达式(Extended Regular Expression,ERE)支持比基本正则表达式更多的元字符,但是扩展正则表达式对有些基本正则表达式所支持的元字符并不支持。前面介绍的元字符“^”、“$”、“.”、“*”、“[]”以及“[^]”这6个元字符在扩展正则表达式都得到了支持,并且其意义和用法都完全相同,不再重复介绍。接下来重点介绍一下在扩展正则表达式中新增加的一些元字符。
| 元字符 | 说明 |
|---|---|
| ? | 将前一项字符进行0次或者1次的重复匹配 |
| + | 将前一项进行1次或者多次的重复匹配 |
| (|) | 匹配|符号左边或者右边的字符 |
3.2 示例
[root@server ~]# grep -n "bash$" /etc/passwd
[root@server ~]# grep -n "\<[[:digit:]]\{3,4\}\>" /etc/passwd
[root@server ~]# grep -n "\<[0-9]\{3,4\}\>" /etc/passwd
[root@server ~]# egrep -n "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
[root@server ~]# grep -nE "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg
[root@server ~]# grep -n "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
# 注意:grep不支持扩展正则(? + (|)),要想生效,可以使用上述三种方法





# 将netstat -tan显示结果中以LISTEN开头后跟0个或多个空白字符结尾的行信息
[root@server ~]# netstat -tan | grep "LISTEN[[:space:]]*$"
# 检索fdisk -l 命令结果中,包含/dev/开头后跟上n的行信息
[root@server ~]# fdisk -l | grep "^/dev/n"
# 显示/etc/passwd中包含root、sshd、chrony的相关信息
[root@server ~]# egrep -n "(root|sshd|chrony)" /etc/passwd
[root@server ~]# grep -nE "(root|sshd|chrony)" /etc/passwd
# 检索ifconfig显示信息中结果为1-255间的整数
[root@server ~]# ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5] )\>"
# 取出echo输出的绝对路径名中的文件名
[root@server ~]# echo /etc/yum.repos.d | egrep [^/]+/?$


三、作业
1、作业一
编写脚本for1.sh,使用for循环创建20账户,账户名前缀由用户从键盘输入,账户初始密码由用广输入,例如: test1、test2、test3、…、 test10
- 第一步,创建并编写脚本
[root@server ~]# vim for1.sh

- 第二步、执行并查看:
[root@server ~]# bash for1.sh
请输入用户账户名前缀: test
请输入用户的密码: 123456
[root@server ~]# cat /etc/passwd | tail -20

2、作业二
编写脚本for2.sh,使用for循环,通过ping命令测试网段的主机连通性,IP前3段由用户输入,如: 输入192.168.48 ,则pin 192.168.48.125 - 192.168.48.135,将可以ping通的主机IP地址写入到 /tmp/host_up.txt文件中,不能ping通的主机IP地址写入到: /tmp/host_down.txt文件中
- 第一步、创建并修改脚本文件
[root@server ~]# vim for2.sh

- 第二步、执行并查看
[root@server ~]# bash for2.sh
请输入网段:192.168.13
up ip:
192.168.13.134 is updown ip :
192.168.13.125 is down
192.168.13.126 is down
192.168.13.127 is down
192.168.13.128 is down
192.168.13.129 is down
192.168.13.130 is down
192.168.13.131 is down
192.168.13.132 is down
192.168.13.133 is down
192.168.13.135 is down
[root@server ~]# cat /tmp/host_down.txt

3、作业三
使用for循环实现批量主机root密码的修改
- (1) 打开多台主机
- (2) 使用ssh-keygen命令建立密钥对
- (3) 多台主机间通过ssh-copy-id进行免密登录(4) 编写脚本for3.sh,通过for循环登录主机修改对方root账户密码
步骤:
- 第一步:首先打开三台安装好的虚拟机:

- 第二步、再主虚拟机上进行记录其他两台机子的IP地址:
[root@server ~]# vim ip.txt

- 第三步、三台主机生成密钥对
server

NODE1:

NODE2:

- 第四步、将生成的密钥对进行上传:
[root@server ~]# ssh-copy-id root@192.168.13.135
[root@server ~]# ssh-copy-id root@192.168.13.136

- 第五步、创建并修改脚本
[root@server ~]# vim for3.sh

- 第六步,执行脚本:

[root@server ~]# bash for3.sh
请输入密码:123
更改用户 root 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 root 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]#
相关文章:
RHCE——十七、文本搜索工具-grep、正则表达式
RHCE 一、文本搜索工具--grep1、作用2、格式3、参数4、注意5、示例5.1 操作对象文件:/etc/passwd5.2 grep过滤命令示例 二、正则表达式1、概念2、基本正则表达式2.1 常见元字符2.2 POSIX字符类2.3 示例 3、扩展正则表达式3.1 概念3.2 示例 三、作业1、作业一2、作业…...
小程序实现摄像头拍照 + 水印绘制
文章标题 01 功能说明02 使用方式 & 效果图2.1 基础用法2.2 拍照 底部定点水印 预览2.3 拍照 整体背景水印 预览 03 全部代码3.1 页面布局 html3.2 业务核心 js3.3 基础样式 css 01 功能说明 需求:小程序端需要调用前置摄像头进行拍照,并且将拍…...
SpringMVC:从入门到精通,7篇系列篇带你全面掌握--三.使用SpringMVC完成增删改查
🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 效果演示 一.导入项目的相关依赖 二.…...
ABAP GN_DELIVERY_CREATE 报错 VL 561
GN_DELIVERY_CREATE 去创建内向交货单的时候。 报错 VL 561 Essential transfer parameters are missing in record 表示一些必输字段没输入 诸如一些,物料号。单位。等一些字段 输入之后即可 DATA: ls_return TYPE bapireturn.DATA: lt_return TYPE STANDARD T…...
AWS-数据库迁移工具DMS-场景:单账号跨区域迁移RDS for Mysql
参考文档: 分为几个环节: 要使用 AWS DMS 迁移至 Amazon RDS 数据库实例: 1.创建复制实例 有坑内存必须8g或者以上,我测试空库 都提示内存不足 2.创建目标和源终端节点 目标空库也得自己创建哈 3.刷新源终端节点架构 4.创建迁…...
【漏洞复现】E-office文件包含漏洞
漏洞描述 Weaver E-Office是中国泛微科技(Weaver)公司的一个协同办公系统。泛微 E-Office 是一款标准化的协同 OA 办公软件,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。 该漏洞是由于存在…...
Linux 系统常用命令总结
目录 提示一、文件和目录操作二、文件查看和编辑三、文件权限管理四、文件压缩和解压缩五、查找文件六、系统信息和状态七、用户和权限管理八、网络相关操作九、包管理十、进程管理十一、时间和日期十二、系统关机和重启十三、文件传输十四、其他常用命令 提示 [ ]:…...
【数据结构】树的基础入门
文章目录 什么是树树的常见术语树的表示树的应用 什么是树 相信大家刚学数据结构的时候最先接触的就是顺序表,栈,队列等线性结构. 而树则是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合 非线性 体现在它是由n个有限结点(可以是零个结点)组成一个具有层次关…...
【多线程】Thread的常用方法
Thread的常用方法 1.构造器 Thread提供的常见构造器说明public Thread(String name)可以为当前线程指定名称public Thread(Runnable target)封装Runnable对象成为线程对象public Thread(Runnable target,String name)封装Runnable对象成为线程对象,并指定线程名称…...
windows 下docker安装宝塔镜像 宝塔docker获取镜像
1. docker 安装宝塔 打开链接:https://www.docker.com/get-started,找对应的版本下载docker,安装docker打开百度云盘:链接:https://pan.baidu.com/s/1DGIjpKkNDAmy4roaKGLA_w 提取码:u8bi 2. 设置镜像 点…...
【FusionInsight 迁移】HBase从C50迁移到6.5.1(01)迁移概述
【FusionInsight 迁移】HBase从C50迁移到6.5.1(01)迁移概述 HBase从C50迁移到6.5.1(01)迁移概述迁移范围迁移前的准备HDFS文件检查确认HBase迁移目录确保数据落盘停止老集群HBase服务停止新集群HBase服务 HBase从C50迁移到6.5.1&a…...
ETCD集群搭建(实践可用)
概述 etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。 - 官方网址: Documentation versions | etcd 准备cfssl证书生成工具 cfssl是一个开源的证书管理工具,使用json文件生成证书. 在任意一…...
基于stm32f103rct6的呼吸灯实现
一、PWM 我们可以通过改变灯的有效电压占空比来实现呼吸灯效果。其中我们要用到PWM(脉宽调制),通过pwm我们可以来改变高电平的占空比 占空比:在一个周期中,高电平所占整个周期的百分比 具体如图: 当我们用…...
关于火绒邮件监控引起的扫描任意IP会有25和110端口反馈
之前测试过公司的外网IP,因为之前一直很注意对外映射的端口,都限制了可以访问的IP地址和端口,所以之前扫描的时候是一个端口都扫描不出来的。最近闲的无事,想着再扫描试试,结果发现居然开放了25和110端口,我…...
物联网应用中蓝牙模块怎么选?_蓝牙模块厂家
在蓝牙模块选型前期,一定要了解应用场景以及需要实现的功能(应用框图),以及功能实现过程中所能提供调用的接口(主从设备,功能),考虑模块供电,尺寸,接收灵敏度…...
Mysql远程登录报错:Host ‘192.168.137.1‘ is not allowed to connect to this MySQL server
连接失败是因为数据库没有对指定的ip的服务器地址的连接进行授权,许哦一需要先进行授权。 1. 改表 先登录登录数据库:mysql -u root -p mysql>use mysql;mysql>update user set host % where user root;mysql>FLUSH PRIVILEGES; 2.授权 …...
vue去掉循环数组中的最后一组的某个样式style/class
vue去掉循环数组中的最后一组的某个样式style/class 需求:要实现这样的排列 现状 发现,最后一个格子并没有跟下面绿色线对齐。 最后发现 是因为 每个格子都给了 margin-right:36px,影响到了最后一个格子 所以要 将最后一个格子的…...
Vue2面试题100问
Vue2面试题100问 Vue2面试题100问1.简述一下你对Vue的理解2.声明式和命令式编程概念的理解3.Vue 有哪些基本特征4.vue之防止页面加载时看到花括号解决方案有哪几种?5.Vue中v-for与v-if能否一起使用?6.vue中v-if与v-show的区别以及使用场景7.v-on可以监听…...
开机启动应用
windows 建立快捷方式 winr 输入shell:startup 将快捷方式复制进来 就可以了 如果你有ccleaner,也可以看到...
RK3588平台产测之ArmSoM-W3 DDR压力测试
1. 简介 RK3588从入门到精通 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得起市场的检验 2. 环境介绍 硬件环境: …...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
