正则表达式、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 2018
    2017 2017 2024
    2017 2017 2017
    sed 's/2017/6666/' shu.txt            #把所有行的第1个2017替换成6666
    sed 's/2017/6666/2' shu.txt        #把所有行的第2个2017替换成6666
    sed '1s/2017/6666/' shu.txt        #把第1行的第1个2017替换成6666
    sed '3s/2017/6666/3' shu.txt        #把第3行的第3个2017替换成6666
    sed '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/bash
    setenforce 0                            #关闭selinux
    yum -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        #修改配置文件,将监听端口修改为82
    systemctl 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/bash
    u=$(sed  -n  '/bash$/s/:.*//p'  /etc/passwd)        #找到passwd文档中以bash结尾的行,然后将行中冒号以及冒号后面内容都删除,此处的p代表仅仅显示s替换成功的行,最后赋值给u
    for i in $u                            #将那些用bash的账户名交给for循环
    do
    pass=$(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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

aiXcoder自动跳出

在使用vscode时突然提示&#xff1a;需登录aixcoder才可以继续使用&#xff1b;如果不登录&#xff0c;一使用vscode就会自动弹出aixcoder试用界面&#xff1a; 试用&#xff1f;后面可能要收取费用&#xff0c;本着白嫖的宗旨思考&#xff1a;那么怎么恢复原来的版本呢&#x…

A 股承担着一个什么功能?

​A 股&#xff1a;中国资本市场的核心角色 A 股&#xff0c;即人民币普通股票&#xff0c;在中国资本市场中扮演着至关重要的角色。它不仅是投资者买卖交易的场所&#xff0c;更是中国经济发展的重要引擎。 首先&#xff0c;A 股为中国的企业提供了融资平台。中国有着庞大的…

天天酷跑-C语言搭建童年游戏(easyx)

游戏索引 游戏名称&#xff1a;天天酷跑 游戏介绍&#xff1a; 本游戏是在B站博主<程序员Rock>的视频指导下完成 想学的更详细的小伙伴可以移步到<程序员Rock>视频 【程序员Rock】C语言项目&#xff1a;手写天天酷跑丨大一课程设计首选项目&#xff0c;手把手带你用…

Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南

SQL注入—sqli-labs靶场 零、前言一、环境搭建①、VirtualBox②、Kali Linux③、Docker 二、闯关开始1、Less-1——union2、Less-2—数字型—union3、Less-3—)—union4、Less-4—")—union5、Less-5——布尔盲注6、Less-6—"—布尔盲注7、Less-7—))7.1—布尔盲注7.…

Git学习笔记(第8章):IEAD实现GitHub操作(VSCode)

目录 8.1 VSCode登录GitHub账号 8.2 创建远程库 8.3 本地库推送到远程库(push) 8.4 远程库拉取到本地库(pull) 8.5 远程库克隆到本地库(clone) 8.1 VSCode登录GitHub账号 Step1&#xff1a;安装“GitHub Pull Requests and Issues”插件 Step2&#xff1a;登录GitHub账号 …

加密项目调研的评估框架

当谈到加密货币时&#xff0c;您在决定是否投资之前需要考虑几个关键因素。无论您是刚刚开始接触新的加密项目还是正在寻求扩展您的投资组合&#xff0c;拥有一个方便的加密项目评估框架都会很有帮助。 本文将解释一个分步框架&#xff0c;以帮助您评估各种加密项目。 您如何…

Kubernetes的ConfigMap

文章目录 环境概念配置pod使用ConfigMap创建ConfigMapkubectl create configmap目录文件自定义key值literal值 产生器&#xff08;generator&#xff09;文件自定义key值literal值 定义容器环境变量单个ConfigMap多个ConfigMap 配置ConfigMap里所有键值对为环境变量在pod命令里…

透明拼接屏在汽车领域的应用

随着科技的进步&#xff0c;透明拼接屏作为一种新型的显示技术&#xff0c;在汽车领域的应用越来越广泛。尼伽小编将围绕透明拼接屏在汽车本身、4S店、展会、工厂等方面的应用进行深入探讨&#xff0c;并展望未来的设计方向。 一、透明拼接屏在汽车本身的应用 车窗显示&#x…

JeecgBoot 3.6.1使用Online表单开发生成代码,如何定义自定义查询条件

一、使用Online表单生成代码&#xff0c;运行结果如下 二、如果我们想要加入一些筛选条件&#xff0c;例如用姓名查询 1.可在生成的前端代码中加入如下代码&#xff0c;文件为****data.ts //查询数据 export const searchFormSchema: FormSchema[] [ ];2.对如上代码进行编辑…

3D应用开发工具HOOPS引领数字化工厂浪潮:制造业转型的关键角色!

随着科技的迅猛发展&#xff0c;制造业正经历着数字化转型的浪潮。在这一变革的前沿&#xff0c;Tech Soft 3D 的 HOOPS技术正扮演着关键的角色。 本文将深入研究HOOPS技术如何在数字化工作流程中发挥作用&#xff0c;以及它是如何引领制造业朝着更高效、智能的未来迈进的。 …

【C语言进阶】预处理详解

引言 对预处理的相关知识进行详细的介绍 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言 预定义符号 #define定义常量 #define定义宏 带有副作用的宏参数 宏替换的规则 …

空气净化器or宠物空气净化器?五款猫用空气净化器优质推荐!

作为一个养猫家庭的主人&#xff0c;每天都要面对清理猫砂盘的挑战&#xff0c;这种令人难以形容的气味实在让人难以忍受。尤其是家里有小孩和老人&#xff0c;他们可能会出现过敏性鼻炎等问题&#xff0c;而抵抗力较差的人更容易受到影响。此外&#xff0c;换毛季节到来时&…

Qt 拖拽事件示例

一、引子 拖拽这个动作,在桌面应用程序中是非常实用和具有很友好的交互体验的。我们常见的譬如有,将文件拖拽到某个窗口打开,或者拖拽文件到指定位置上传;在绘图软件中,选中某个模板、并拖拽到画布上,画布上变回绘制该模板的图像… 诸如此类,数不胜数。 那么,在Qt中我…

【MySQL】最左匹配原则

最左匹配原则 0x1 简单说下什么是最左匹配原则 顾名思义&#xff1a;最左优先&#xff0c;以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like&#xff09;就会停止匹配。 例如&#xff1a;b 2 如果建立(a&#xff0c;b&#xff09;顺序…

远程桌面--虚拟机与主机的文件传输

注意&#xff1a; 确保VMware开头的服务全部在运行进入虚拟机打开文件管理器点击计算机右键选择属性在选择远程管理选择允许 1.winR 输入mstsc 2.输入虚拟机的ip地址 2.输入虚拟机的密码 上面的Administrator是虚拟机的用户名&#xff0c;有时会需要我们手动输入 3.验证…

MySQL连表操作之一对多

MySQL连表操作之一对多 目录 引入外键 Navicat创建外键使用外键SQL命令创建外键代码删除外键代码增加外键通过外键进行数据操作 正文 回到顶部 引入 当我们在数据库中创建表的时候&#xff0c;有可能某些列中值内容量很大&#xff0c;而且重复。 例子&#xff1a;创建一个…

基于SpringBoot Vue二手闲置物品交易系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

C语言之反汇编查看函数栈帧的创建与销毁

文章目录 一、 什么是函数栈帧&#xff1f;二、 理解函数栈帧能解决什么问题呢&#xff1f;三、 函数栈帧的创建和销毁解析3.1、什么是栈&#xff1f;3.2、认识相关寄存器和汇编指令3.2.1 相关寄存器3.2.2 相关汇编命令 3.3、 解析函数栈帧的创建和销毁3.3.1 预备知识3.3.2 代码…

Python 猎户星空Orion-14B,截止到目前为止,各评测指标均名列前茅,综合指标最强;Orion-14B表现强大,LLMs大模型

1.简介 Orion-14B-Base是一个具有140亿参数的多语种大模型&#xff0c;该模型在一个包含2.5万亿token的多样化数据集上进行了训练&#xff0c;涵盖了中文、英语、日语、韩语等多种语言。在多语言环境下的一系列任务中展现出卓越的性能。在主流的公开基准评测中&#xff0c;Orio…

Qt —— 自定义飞机仪表控件(附源码)

示例效果 部署环境 本人亲测版本Vs2017+Qt5.12.4,其他版本应该也可使用。 源码1 qfi_ADI::qfi_ADI( QWidget *parent ) :QGraphicsView ( parent ),m_scene ( nullptr )