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. 环境介绍 硬件环境: …...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
