“Shell“正则表达式;文本三剑客Sed

news2024/11/25 10:41:45

文章目录

  • 一.正则表达式
        • 1.1正则表达式介绍
        • 1.2命令演示
        • 1.3正则表达式实验演示
  • 二.Sed编辑器
        • 2.1Sed介绍
        • 2.2操作命令演示
        • 2.3替换
        • 2.4插入
        • 2.4总结:

一.正则表达式

1.1正则表达式介绍

通常用于判断语句中,用来检查某一字符串是否满足某一格式

  • 正则表达式是由普通字符与元字符组成
  • 普通字符包括大小写字母、数字、标点符号及子些其他符号
  • 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符的面的字符或表达式)在目标对象中的出现模式

基础正则表达式常见元字符: (支持的工具: grep、egrep、sed、awk)
在这里插入图片描述
拓展正则表达式元字符(支持的工具:egrep,awk)grep -E sed -E
在这里插入图片描述

1.2命令演示

在这里插入图片描述
1、查找符合条件的以g开头和d结尾的都能匹配到在这里插入图片描述
2.使用封死只能匹配到规定的内容
在这里插入图片描述
3、^是匹配以什么开头
在这里插入图片描述

1.3正则表达式实验演示

1.号码分配:
区号025开头,号码与区号间可以是空格、-、没有,号码必须是5或者8开头的八位数

02588888888
025-5555555555
025 12345678
025 54321678
025ABC88888
025-85432109
028-85643210
0251-52765421

grep -E '^(025)[ -]?[58][0-9]{7}$' num.txt
grep -P '^(025)[ -]?[58]\d{7}$' num.txt     #\d表示数字 需要加上-P支持
 
区号025开头  ^(025)
号码与区号间可以是空格、-、没有   [ -]?
号码必须是5或者8开头的八位数 [58][0-9]{7}
(025)[ -]?[58][0-9]{7}
电子邮箱
用户名@子域名.[二级域名].顶级域

2、电子邮箱的查找分配:
电子邮箱内容
zhangsan123@qq.com
li si@163.com
wang@wu@sina.com
zhao liu@126.com
qianqi@sina.com.cn

用户名@:长度要求在6-18位,任意大小写英文,任意数字,除了@符号和空格以外的其它任意符号字符,开头只能是 _ 或者字母
([a-zA-Z_][@ ]{5,17})@
子域名.[二级域名]:长度任意,符号只能包含 - _ .
[a-zA-Z0-9_-.]+(.[a-zA-Z0-9_-.]+)?
.顶级域名: 长度在2-5,任意大小写英文
.([a-zA-Z]{2,5})$

egrep "^([a-zA-Z_][^@ ]{5,17})@[a-zA-Z0-9\_\-\.]+(\.[a-zA-Z0-9\_\-\.]+)?\.([a-zA-Z]{2,5})$"

二.Sed编辑器

2.1Sed介绍

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命今来处理数据流中的数据,这些命今要么从命令行中输入,要么存储在一个命令文本文件中。
sed 的工作流程主要包括读取、执行和显示三个过程:

  • 读取 : sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区(又称模式空间,pattern space)。
  • 执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed命令 将会在所有的行上依次执行。
  • 显示 : 发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都

被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

命令格式:
sed  -e  '操作'   文件1   文件2  ...
sed  -n   -e   '操作'   文件1   文件2  ...
sed  -f  脚本文件   文件1   文件2  ...
sed  -i   -e   '操作'   文件1   文件2  ...


sed  -e   `n{
操作1
操作2
...
}` 文件1    文件2   ...

常用选项:

选项功能
-e 或 --expression=表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f 或 --file=表示用指定的脚本文件来处理输入的文本文件
-h或–help显示帮助
-n,–quiet 或 silent禁止sed编辑器输出,但可以与p命令一起使用完成输出。
-i直接修改目标文本文件

常用操作:

操作解释
s替换,普换指定字符
d删除,删除选定的行
a增加,在当前行下面增加一行指定内容
i插入,在选定行上面插入一行指定内容
c替换,将选定行替换为指定内容
y字符转换,转换前后的字符长度必须相同
p打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容:如果有非打印字符,则以 ASCIl码输出。其通常与“-n”选项一起使用
=打印行号
l(小写)L打印数据流中的文本和不可打印的ASCLL字符(比如结束符$,制表符\t)

2.2操作命令演示

打印文件:
在这里插入图片描述
在这里插入图片描述
打印文件行数
在这里插入图片描述
做打印文件后加上$
在这里插入图片描述
打印文件按序号排序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打印指定行
在这里插入图片描述
显示连续几行
在这里插入图片描述
显示几行到最后一行:
在这里插入图片描述
显示指定行和最后一行
在这里插入图片描述
打印所指定行之后的连续3行:

在这里插入图片描述
输出到第五行退出命令:(只能从开头开始)
在这里插入图片描述

2.3替换

命令格式:

行范围 s/旧字符串/新字符串/替换标记

替换标记:

标记解释
数字表明新字符串将替换第几处匹配的地方
g表明新字符串将替换第几处匹配的地方
p表明新字符串将替换第几处匹配的地方
w文件将替换的结果写到文件中

替换命令使用:
在这里插入图片描述
1、在开头插入#号
在这里插入图片描述
2、删除所有行的#
在这里插入图片描述
3、使用s来替换

 sed -n  '/swap/ s/^/#/gp' /etc/fstab     //注释掉文件里有swap的行内容 
#UUID=31b870c6-db09-424d-bfdd-20d7bbb54337 swap                    swap    defaults        0 0

sed -n  '/^UUID/ s/^/#/gp' /etc/fstab   //注释掉所有以UUID开头的行内容
#UUID=5429c72d-e20c-4b24-bddc-2446d40ec8ba /                       xfs     defaults        0 0
#UUID=0bc8a633-df1e-404d-a44c-2cdd57be56cb /boot                   xfs     defaults        0 0
#UUID=31b870c6-db09-424d-bfdd-20d7bbb54337 swap                    swap    defaults        0 0
sed  's/.*swap.*/#&/' /etc/fstab        //&这个命令表示匹配前面执行命令的整行内容

# /etc/fstab
# Created by anaconda on Wed Mar 22 19:07:19 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=5429c72d-e20c-4b24-bddc-2446d40ec8ba /                       xfs     defaults        0 0
UUID=0bc8a633-df1e-404d-a44c-2cdd57be56cb /boot                   xfs     defaults        0 0
#UUID=31b870c6-db09-424d-bfdd-20d7bbb54337 swap                    swap    defaults        0 0

4、使用-f 加上脚本来执行命令

 vim dz  //写入脚本文件
#把以root开头的行注释
/^root/ s/^/#/     //把ftp替换成mysed
s/ftp/mysed/g     //把以nologin为结尾的行删除
/nologin$/ d

5、在s替换后面加的字符可以是任何字符

sed -n 's/\/bin\/bash/\/bin\/csh/p' /etc/passwd
sed -n 's!/bin/bash!/bin/csh!p' /etc/passwd		//使用“!”作为字符串分隔符
sed -i 's9\945\9\99\98\939g' test.txt		//将94599替换为9893

2.4插入

1.c命令插入
在这里插入图片描述
2、使所有的1字符转换成A,所有的4字符转换成B,所有的5字符转换成C
在这里插入图片描述
3、使用a在指定的行下面插入内容
在这里插入图片描述
4、使用i在指定的行上面插入内容
在这里插入图片描述
5、将1到3行的内容剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后
在这里插入图片描述
6.替换字符位置
在这里插入图片描述

2.4总结:

sed   -n   -e   '行号区间p'
                '/字符串或正则/p'
#删除
                 '行号区间d'
                 '/字符串或正则/d'
                 '行号区间 s/old/new/g'
                 '/字符串或正则/ s/old/new/g'
                 '行号区间c XXX'
                 '/字符串或正则/cXXX'
                 '行号区间 y/old/new/'
                 '/字符串或正则/ y/old/new/'
                 '/字符串或正则/ y/old/new/'
#插入
                 '行号区间 a  XXX'
                 '行号区间 i  XXX'
                 '行号区间 r  文件'
                 

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

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

相关文章

unity,如何让人物随着鼠标滑动而转向?

介绍 unity,如何让人物随着鼠标滑动而转向? 方法 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;public class PlayerMovement : MonoBehaviour {public float speed 6f; …

STM32之IIC

(24条消息) C51之olde显示屏模块的使用_c51 oled_陈学弟的博客-CSDN博客IIC介绍 (24条消息) C51之olde显示屏模块的使用_c51 oled_陈学弟的博客-CSDN博客 函数封装 用到的库函数: HAL_StatusTypeDef HAL_I2C_Mem_Write ( I2C_HandleTypeDef * hi2c , uint16_t…

Day 1 认识软件测试——(软件测试定义、目的、原则)

Day 1 认识软件测试——(软件测试定义、目的、原则) 文章目录 Day 1 认识软件测试——(软件测试定义、目的、原则)软件测试的定义软件测试的目的软件测试的经济学问题黑盒测试白盒测试软件测试原则小结所谓软件测试,就是一个过程或一系列过程,用来确定计算机代码完成了其…

LitCTF 2023 WriteUp(部分)

Index 前言题目Web我Flag呢? Pwn只需要nc一下~口算题卡题目分析EXP: 狠狠的溢出涅~题目分析EXP: ezlogin题目分析EXP: Reverse世界上最棒的程序员 ez_XOREXP: CryptoHex?Hex!(初级)梦想是红色的原来你也玩原神 Misc签到!(初级)Wha…

【MyBatis】Spring Boot整合MyBatis操作数据库

文章目录 1. MyBatis是什么?2. 为什么要学MaBatis?3. MyBatis环境搭建4. MyBatis的使用4.1 简单示例4.2 获取动态参数4.2.1 ${xxx}获取动态参数4.2.2 #{xxx}获取动态参数4.2.3 #{xxx}与${xxx}获取字符串类型数据4.2.4 sql注入问题4.2.5 模糊查询like4.2.…

“Shell“脚本命令

文章目录 一.sort命令二.uniq命令三.tr命令四.cut命令五.split命令六.paste命令七.eval命令 一.sort命令 以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序;比较原则是从首字符向后,依次按ASCII码值进行比较,最后将…

“Shell“数组

文章目录 一.数组1.1数组定义的方法1.2示例在这里插入图片描述 二.数组包2.1数组包括的数据类型2.2传输数组2.3返回数组 一.数组 1.1数组定义的方法 (30 20 10 60 50 40) //以空格相间隔的数组0 1 2 3 4 5 //下标方法一&am…

ACL 2022 | chatglm微调神器P-Tuning v2论文学习

一、概述 title:P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks 论文地址:https://arxiv.org/abs/2110.07602 代码:GitHub - THUDM/P-tuning-v2: An optimized deep prompt tuning st…

ESP32 浮点性能评估

根据数据表,处理器应该包含一个硬件浮点单元: ESP32数据手册摘录 我编写了一个小测试来测量单精度(32 位)和双精度(64 位)的基本浮点运算。除了这些基本测试之外,我还测量了一个典型的小型算法的性能,该算法计算天文学中使用的本地视恒星时间。 作为参考,我在 STM32…

Apache Kafka实战:超越数据边界-Apache Kafka在大数据领域的崭新征程【上进小菜猪大数据】

上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。 Apache Kafka 本文将介绍Apache Kafka在大数据领域的应用及其重要性,并提供一些代码实例来帮助读者更好地理解和应用Apache Kafka。文章主要包括以下几个方面&#xf…

GPT-2 面试题

简介 1、GPT-2 是什么?它是基于什么模型的? GPT-2 是一种人工智能的大型语言模型,由 OpenAI 在2019年提出。它是基于变压器(Transformer)模型的,使用了自注意力(Self-Attention)机…

分布式锁的实现?

分布式锁的实现? 答: 应用比较广泛:后台业务的防重提交 以前的传统应用用户流量比较小,为了节省成本,很多应用的成本都是单节点部署,为了解决单节点访问资源一致性的问题,对于java来说&#…

linux系统(守护进程-线程)08_守护进程,线程,线程创建,线程退出,线程回收,杀死线程,线程分离,线程属性分离

01 学习目标 1.守护进程的特点 2.熟练进行守护进程的创建 3.熟练掌握多线程的创建 4.熟练掌握线程的退出和资源回收 02 守护进程相关的概念 进程组:多个进程在同一个组,第一个进程默认是进程组的组长。 会话:进程组的更高一级,多…

二分搜索帮我解决实际问题

文章阅读 文章阅读 二分搜索代码框架常应用于「在有序数组中搜索指定元素」这个基本场景,具体的实际问题可以没有那么直接,但是也可以使用二分搜索进行解决 实际问题一般都让你求最值,比如让你求吃香蕉的「最小速度」,让你求轮船…

JavaWeb《后端内容:4. 项目实战:书城系统》

0.把之前的系统的Myssm部分封装为包 新建空的工件jar包 创建相同的文件夹,导入相应文件要从out里面导入字节码文件 全部设置完后点构建工件,然后点刚刚我们设置的这个工件,然后从src下的out文件相应的位置就能找到这个jar包,用于…

Discourse Table Builder 插件

ABC 仓库链接GitHub - discourse/discourse-table-builder: A theme component that allows for easily building and editing of markdown tables in Discourse. 概述Table Builder 这个插件能够让用户能够在 Discourse 的编辑对话框中快速的对表格进行编辑,同时也…

Flink学习——处理不同数据源的流数据,存入不同的Sink端

目录 一、单机版安装 二、IDEA操作Flink (一)添加依赖 (二)数据源——Source 1.加载元素数据 2.加载集合数据 3.加载文件目录 4.加载端口 5.加载kafka的topic——重要&常用 6.加载自定义数据源 (三)输出端——Sink 1.读取文件中的数据,处理后输出到…

ESP32设备驱动-振动电机模块驱动

振动电机模块驱动 文章目录 振动电机模块驱动1、振动电机介绍2、硬件准备3、软件准备4、驱动实现1、振动电机介绍 振动电机是用于产生振动的机械装置。 振动的产生是在驱动轴上质量不均匀的电动机的支持下发生的。 它是一种微型直流电机,通过振动让用户知道声音。 在此必须注…

《计算机网络—自顶向下方法》 Wireshark实验(五):UDP 协议分析

用户数据报(UDP)协议是运输层提供的一种最低限度的复用/分解服务,可以在网络层和正确的用户即进程间传输数据。UDP 是一种不提供不必要服务的轻量级运输协议,除了复用/分用功能和简单的差错检测之外,几乎就是 IP 协议了,也可以说它…

RabbitMQ养成记 (10.高级特性:死信队列,延迟队列)

死信队列(DLX) 这个概念 在其他MQ产品里面也是有的,只不过在Rabbitmq中稍微特殊一点 什么叫私信队列呢? 就是当消息成为 dead message之后,可以重新发到另外一台交换机,这个交换机就是DLX。 注意这里的有翻…