正则表达式、grep过滤工具、sed基本用法、sed基本操作指令、sed应用案例

1 案例1:使用正则表达式

1.1 问题

本案例要求熟悉正则表达式的编写,完成以下任务:

  • 利用grep或egrep工具练习正则表达式的基本用法

1.2 方案

表-1 基本正则列表

表-2 扩展正则列表

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:正则表达式匹配练习

1)基本正则表达式

    head -5 /etc/passwd > user        #准备素材

测试 ^ $ [] [^]

    grep ^root user                #找以root开头的行grep bash$ user                #找以bash结尾的行grep ^$ user                    #找空行grep -v ^$ user                #显示除了空行的内容grep "[root]" user            #找r、o、t任意一个字符 grep "[rot]" user                #效果同上grep "[^rot]" user            #显示r或o或t以外的内容grep "[0123456789]" user        #找所有数字grep "[0-9]" user                #效果同上grep "[^0-9]" user            #显示数字以外内容grep "[a-z]" user                #找所有小写字母grep "[A-Z]" user                #找所有大写字母grep "[a-Z]" user                #找所有字母grep "[^0-9a-Z]" user            #找所有符号

测试 . *

    grep "." user                 #找任意单个字符,文档中每个字符都可以理解为任意字符grep "r..t" user                #找rt之间有2个任意字符的行grep "r.t" user                #找rt之间有1个任意字符的行,没有匹配内容,就无输出grep "*" user                    #错误用法,*号是匹配前一个字符任意次,不能单独使用grep "ro*t" user                #找rt,中间的o有没有都行,有几次都行grep ".*" user                #找任意,包括空行 .与*的组合在正则中相当于通配符的效果

测试 \{n\} \{n,\} \{n,m\} \(\)

    grep "ro\{1,2\}t" user        #找rt,中间的o可以有1~2个grep "ro\{2,6\}t" user        #找rt,中间的o可以有2~6个grep "ro\{1,\}t" user            #找rt,中间的o可以有1个以及1个以上grep "ro\{3\}t" user             #找rt,中间的o必须只有有3个grep "\(0:\)\{2\}" user        #找连续的2个0:  小括号的作用是将字符组合为一个整体

扩展正则表达式

以上命令均可以加-E选项并且去掉所有\,改成扩展正则的用法

比如grep "ro\{1,\}t" user可以改成 grep -E "ro{1,}t" user

或者egrep "ro{1,}t" user

    grep "ro\{1,\}t" user            #使用基本正则找o出现1次以及1次以上egrep "ro{1,}t" user            #使用扩展正则,效果同上,比较精简egrep "ro+t" user                #使用扩展正则,效果同上,最精简grep "roo\{0,1\}t" user        #使用基本正则找第二个o出现0~1次egrep "roo{0,1}t" user        #使用扩展正则,效果同上,比较精简egrep "roo?t" user            #使用扩展正则,效果同上,最精简egrep "(0:){2}" user            #找连续的2个0:  小括号的作用是将字符组合为一个整体egrep "root|bin" user            #找有root或者bin的行egrep  "the\b" abc.txt            #找单词the,右边不允许出现数字、字母、下划线egrep  "\bthe\b" abc.txt        #the两边都不允许出现数字、字母、下划线egrep  "\<the\>" abc.txt        #效果同上

 思考:如何匹配大范围的数字?比如250-255

2 案例2:sed基本用法

2.1 问题

本案例要求熟悉sed命令的p、d、s等常见操作

2.2 方案

sed文本处理工具的用法:

    用法1:前置命令 | sed  [选项]  '条件指令'用法2:sed  [选项]  '条件指令'  文件.. ..

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:认识sed工具

sed命令的常用选项如下:

-n(屏蔽默认输出,默认sed会输出读取文档的全部内容)

-r(支持扩展正则)

-i(修改源文件)

  • 条件可以是行号或者/正则/,没有条件时默认为所有行都执行指令
  • 指令可以是p输出、d删除、s替换

步骤二:使用sed

1)行号案例

    head -5 /etc/passwd  >   user        #准备素材sed -n  'p'  user                    #输出所有行sed -n  '1p'  user                #输出第1行sed -n  '2p'  user                #输出第2行sed -n  '3p'  user                #输出第3行sed -n  '2,4p'  user                #输出2~4行sed -n  '2p;4p'  user                #输出第2行与第4行sed -n '3,+1p' user                #输出第3行以及后面1行sed -n '1~2p' /etc/passwd            #输出奇数行

 2)使用正则当条件

    sed -n '/^root/p' user            #输出以root开头的行  sed -n '/root/p' user                #输出包含root的行sed -nr '/^root|^bin/p' user        #输出以root开头的行或bin开头的行,|是扩展正则,需要r选项

 3)特殊用法

    sed -n '1!p' user                    #输出除了第1行的内容,!是取反sed -n '$p'  user                    #输出最后一行sed -n '='  user                    #输出行号,如果是$=就是最后一行的行号

以上操作,如果去掉-n,在将p指令改成d指令就是删除

步骤三:sed工具的p、d、s操作指令案例集合

1)p指令案例集锦(自己提前生成一个a.txt文件)

    [root@svr5 ~]# sed  -n 'p' a.txt            #输出所有行,等同于cat a.txt[root@svr5 ~]# sed  -n '4p' a.txt            #输出第4行[root@svr5 ~]# sed  -n '4,7p' a.txt        #输出第4~7行[root@svr5 ~]# sed  -n '/^bin/p' a.txt        #输出以bin开头的行[root@svr5 ~]# sed  -n '$=' a.txt            #输出文件的行数

 2)d指令案例集锦(自己提前生成一个a.txt文件)

    [root@svr5 ~]# sed  '3,5d' a.txt             #删除第3~5行[root@svr5 ~]# sed  '/xml/d' a.txt            #删除所有包含xml的行[root@svr5 ~]# sed  '/xml/!d' a.txt         #删除不包含xml的行,!符号表示取反[root@svr5 ~]# sed  '/^install/d' a.txt    #删除以install开头的行[root@svr5 ~]# sed  '$d' a.txt                #删除文件的最后一行[root@svr5 ~]# sed  '/^$/d' a.txt             #删除所有空行

 3)sed命令的s替换基本功能(s/旧内容/新内容/选项):

    [root@svr5 ~]# vim  shu.txt                #新建素材2017 2011 20182017 2017 20242017 2017 2017sed 's/2017/6666/' shu.txt            #把所有行的第1个2017替换成6666sed 's/2017/6666/2' shu.txt        #把所有行的第2个2017替换成6666sed '1s/2017/6666/' shu.txt        #把第1行的第1个2017替换成6666sed '3s/2017/6666/3' shu.txt        #把第3行的第3个2017替换成6666sed 's/2017/6666/g' shu.txt         #所有行的所有个2017都替换sed '/2024/s/2017/6666/g' shu.txt    #找含有2024的行,将里面的所有2017替换成6666

思考:如果想把 /bin/bash 替换成 /sbin/sh 怎么操作?

    sed -i '1s/bin/sbin/' user            #传统方法可以一个一个换,先换一个sed -i '1s/bash/sh/' user            #再换一个

 如果想一步替换:

    sed 's//bin/bash//sbin/sh/' user         #直接替换,报错sed 's/\/bin\/bash/\/sbin\/sh/' user    #使用转义符号可以成功,但不方便sed 's!/bin/bash!/sbin/sh!' user        #最佳方案,更改s的替换符sed 's(/bin/bash(/sbin/sh(' user        #替换符号可以用键盘上大部分字符

3 案例3:编写脚本,搭建httpd服务,用82号端口开启服务

编写脚本,按下列方法实现

    #!/bin/bashsetenforce 0                            #关闭selinuxyum -y install httpd &> /dev/null        #安装网站echo  "sed-test~~~" > /var/www/html/index.html        #定义默认页sed  -i  '/^Listen 80/s/0/2/'  /etc/httpd/conf/httpd.conf        #修改配置文件,将监听端口修改为82systemctl restart httpd                #开服务systemctl enable httpd                #设置开机自启

然后运行脚本 

    curl 192.168.2.5:82   #脚本运行之后,测试82端口看到页面即可    sed-test~~~ss -ntulp | grep httpd   #检查服务的端口是否为82

4 sed综合脚本应用

4.1 问题

本案例要求编写脚本,实现以下需求,效果如图-1:

  • 找到使用bash作登录Shell的本地账户名
  • 列出这些账户的shadow密码记录
  • 按每行“账户名 --> 密码记录”保存到文件中

 

4.2 方案

基本思路如下:

  1. 先用sed工具取出登录Shell为/bin/bash的账户
  2. 再结合循环取得的账户记录,逐行进行处理
  3. 针对每一行账户记录,采用掐头去尾的方式获得名称、密码
  4. 按照指定格式追加到文件

4.3 步骤

实现此案例需要按照如下步骤进行。

    #!/bin/bashu=$(sed  -n  '/bash$/s/:.*//p'  /etc/passwd)        #找到passwd文档中以bash结尾的行,然后将行中冒号以及冒号后面内容都删除,此处的p代表仅仅显示s替换成功的行,最后赋值给ufor i in $u                            #将那些用bash的账户名交给for循环dopass=$(grep  $i  /etc/shadow)        #用每个账户名去shadow中找对应信息pass=${pass#*:}                    #掐头,从左往右删除到第1个冒号pass=${pass%%:*}                    #去尾,从右往左删除到最后一个冒号,经过上述步骤,pass就是最终要的密码了echo "$i --> $pass"                #按格式喊出,如果要存到文件中就用追加重定向done

5 准备新环境

后续课程需要4台Rocky-8.6 版本的虚拟机,不要用其他版本

创建虚拟机,用最小方式安装

CPU 1个,内存 1G ,硬盘空间默认大小即可,如图-2所示。

按要求配置好ip,同网段之间要能互通,配置好yum,修改主机名

真机能与所有虚拟机互通

主机名 网卡1 网卡2

proxy 192.168.99.5 192.168.88.5

web1 192.168.99.100

web2 192.168.99.200

client 192.168.88.10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序之WXSS模板样式、页面配置(.json)和网络数据请求

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

CS8370错误,这是由于使用了C# 7.3中不支持的功能

目录 背景: 第一种方法: 第二种办法: 背景: 在敲代码的时候&#xff0c;程序提示报错消息提示:CS8370错误&#xff0c;那么这是什么原因导致的&#xff0c;这是由于使用了C# 7.3中不支持的功能&#xff0c;不支持该功能&#xff0c;那就是版本太低我们就需要升级更高的版本&…

振弦采集仪在桥梁健康监测中的应用与分析

振弦采集仪在桥梁健康监测中的应用与分析 振弦采集仪是一种专门用于桥梁健康监测的设备&#xff0c;通过对桥梁结构的振动信号进行采集和分析&#xff0c;可以实时监测桥梁的结构健康状况并提前预警潜在问题。 振弦采集仪主要通过在桥梁结构上安放振弦传感器&#xff0c;采集…

LiveVideoStack人物专访:深耕多媒体二十载,他怎么看未来的视频云?

抓住已知的&#xff0c;迎面未知的。 编者按&#xff1a; 大模型、降本、出海&#xff0c;是多媒体从业者交流的高频词&#xff0c;内容与交互的需求层出不穷&#xff0c;大模型与AI的演进目不暇接&#xff0c;让增速低走的视频云迎面新的机遇和挑战。作为一个跨越中美多媒体行…

[MySQL]基础的增删改查

目录 1.前置介绍 2.数据库操作 2.1显示当前数据库 2.2创建数据库 2.3 使用数据库 2.4 删除数据库 3.常用数据类型 3.1整型和浮点型 3.2字符串类型 4.表的操作 4.1查看表结构 4.2创建表 4.3删除表 5.重点 5.1操作数据库 5.2常用数据类型 5.3操作表 1.前置介绍 …

微信小程序首页、界面布局、功能简洁(示例三)

微信小程序首页界面布局、页面简洁&#xff0c;功能简单 直接上具体代码&#xff1a; 1、js代码 Page({/*** 页面的初始数据*/data: {imgList: [../../images/demo.jpg, ../../images/demo.jpg, ../../images/demo.jpg],navList: [{src: ../../images/nav1.png,title: 菜单一}…

IntelliJ IDEA 快捷键大全

IntelliJ IDEA 快捷键大全 一、文本编辑二、构建、编译项目 一、文本编辑 CtrlN 查找类 CtrlN 查找文件 CtrlF 查找文本 可以根据需求去选择红框内的选项 CtrlX 剪切 剪切选中文本&#xff0c;如果未选中则剪切当前行CtrlC 复制 复制选中文本&#xff0c;如果未选中则复制当前…

机器学习工程师在人工智能时代的角色

机器学习工程师在人工智能时代的角色 在当今的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;已成为许多行业不可或缺的一部分。从流程自动化到增强客户体验&#xff0c;人工智能具有改变企业的巨大潜力。这一变革性技术的核心是机器学习&#xff0c;该领域专注于开…

智慧工厂视频监控平台EasyCVR公网收流后内网设备无法播放是什么原因?

安防视频监控平台EasyCVR采用了开放式的网络结构&#xff0c;支持高清视频的接入和传输、分发&#xff0c;平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;此外&am…

如何在科技创新中发挥国有企业的战略支撑作用?

要在科技创新中发挥国有企业的战略支撑作用&#xff0c;需要采取以下措施&#xff1a; 1. 强化国有企业创新主体地位&#xff1a;鼓励和支持国有企业加强技术创新、产品创新、组织创新和市场创新&#xff0c;提高自主创新能力。政府可以给予国有企业一定的政策和资金支持&…

机器学习分类模型评价指标总结(准确率、精确率、召回率、Fmax、TPR、FPR、ROC曲线、PR曲线,AUC,AUPR)

为了看懂论文&#xff0c;不得不先学一些预备知识&#xff08;&#xff08;55555 主要概念 解释见图 TP、FP、TN、FN 准确率、精确率&#xff08;查准率&#xff09;、召回率&#xff08;查全率&#xff09; 真阳性率TPR、伪阳性率FPR F1-score2TP/(2*TPFPFN) 最大响应分…

netty源码:(46) TailContext

TailContext是DefaultChannelPipeline中的一个内部类&#xff0c;它是一个ChannelInboundHandler TailContext在我们所添加的自己定义的所有ChannelInboundHandler(比如通过addLast方法&#xff09;之后&#xff0c;是整个入栈消息处理的最后一环&#xff0c;也就是tail. 它的…

Django 手把手教你搭建MYSQL多数据源 实现读写分离

目录 一、创建3.2版本的Django项目 二、配置MYSQL多数据源 三、实现读写分离 一、创建3.2版本的Django项目 第一步&#xff1a;创建虚拟环境 第二步&#xff1a;打开终端安装django pip install django3.2 第三步&#xff1a;创建项目 django-admin startproject django_…

windows用msvc编译opencv、opencv-python、opencv_contrib、cuda

如要用mingw编译opencv&#xff0c;参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/135741806。 如要用Ubuntu编译opencv&#xff0c;参考我另外一篇文章https://blog.csdn.net/weixin_44733606/article/details/131720128。 一、安装VS2022&…

夜视成像应用激光照明方法

在夜视成像领域&#xff0c;激光照明的使用主要集中在提高成像质量和远距离观察上。 以下是几种用于夜视成像的激光照明方法&#xff1a; 直接激光照明&#xff1a; 这种方法涉及直接用激光光束照射目标。激光器发出的光束可以是可见光或红外光&#xff0c;具体取决于应用需求和…

elastic search入门

参考1&#xff1a;Elastic Search 入门 - 知乎 参考2&#xff1a;Ubuntu上安装ElasticSearch_ubuntu elasticsearch-CSDN博客 1、ElasticSearch安装 1.1安装JDK&#xff0c;省略&#xff0c;之前已安装过 1.2创建ES用户 创建用户&#xff1a;sudo useradd esuser 设置密码&…

仿真机器人-深度学习CV和激光雷达感知(项目2)day03【机器人简介与ROS基础】

文章目录 前言机器人简介机器人应用与前景机器人形态机器人的构成 ROS基础ROS的作用和特点ROS的运行机制ROS常用命令 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;本文内容是我为复试准备的第二个项目 &#x1f4ab;欢迎…

【vue3】GSAP在vue中的使用

一、获取GSAP npm install gsap 二、开始GSAP 导入GSAP&#xff0c;如果需要导入gsap的插件可以参考这里。 import gasp from gsap; 这里用的是选项式&#xff0c;在methods属性中创建一个方法用来写gsap的动画。 gasp_animation(){let tl gasp.timeline({defaults:{ ease:&…

【zlm】针对单个设备的码率的设置

目录 代码修改 实验数据一 实验数据二 同时拉一路视频后 修改记录 使用方法 代码修改 要被子类引用 &#xff0c;所以放在protected 不能放private 下面的结论&#xff0c;可以在下面的实验数据里引用。“同时拉一路视频后” 实验数据一 https://10.60.3.45:10443/index…

php学习

php基础语法 一 php程序 1.php标记 开始标记<?php 和结束标记 ?>中间写 PHP 代码 当解析一个文件时&#xff0c;PHP 会寻找起始和结束标记&#xff0c;也就是告诉php 开始和停止解析二者之间的代码。此种解析方式使得PHP 可以被嵌入到各种不同的文档中去&#xff…