Shell编程之正则表达式与文本处理器2--sed

目录

一、sed 工具

1. 概述

2. sed 原理

3、常用操作选项

3.1 常用选项

3.2 操作命令

4. sed 的使用

5. 具体操作

5.1 打印输出  p

5.1.1 显示范围、单行、指定行输出、指定往后加几行输出

5.1.2  显示奇偶行

5.1.3 将指定内容的行打印出来      

5.1.4 只输出行号

5.2 增加内容  a  i

5.2.1 在指定行之前插入

5.2.2 在指定行之后插入内容

5.3 删除  d

5.3.1 全部删除

5.3.2 删除指定行

5.4 替换  c

5.5 搜索替换  s

5.6 插入文件  r

5.7 另存到文件  w

5.8 同时编辑

5.9 分组操作

5.10 读取完退出

5.11 sed 脚本

5.12 高级应用

5.12.1 -r 匹配正则表达式

5.12.2 结合变量使用


一、sed 工具

1. 概述

sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于Shell脚本中,用以完成各种自动化处理任务。

sed 命令是利用脚本来处理文本文件。它可以依照脚本的指令来处理、编辑文本文件。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

总结:

  • 文本处理工具,读取文本内容,根据指定的条件进行处理,如删除、替换、添加等;
  • 可在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于Shel脚本,以完成自动化处理任务;
  • sed 依赖于正则表达式;

2. sed 原理

工作原理:

  • 读入新的一行内容到缓存空间; 从指定的操作指令中取出第一条指令,判断是否匹配pattern;
  • 如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;
  • 如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;
  • 当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;
  • 当所有行都处理完之后,结束;

总结:

根据输入的命令,在缓存中操作,逐行对比处理数据,看是否和命令要求匹配,若匹配,就继续后续命令编辑,完成后回到之前步骤,取出下一行指令编辑;若不匹配,则忽略该行,继续回去取出下一条指令执行;所有指令都执行完之后,输出数据到缓存,回到第一步,继续读入下一行内容。直到所有命令执行完成,输出到屏幕。

3、常用操作选项

格式:

  • sed [选项] '操作' 参数
  • sed [选项] -f scriptfile 参数

3.1 常用选项

-e

表示用指定命令或者脚本来处理输入的文本文件

进行多次编辑

-f

表示用指定的脚本文件来处理输入的文本文件

指定sed文件名

-h显示帮助
-n

表示仅显示处理后的结果

取消默认输出

-i

直接编辑文本文件。使用时慎重,会直接修改数据

直接在源文件中修改

-i.bak修改完配置文件后进行备份
-r、-E

使用扩展正则表达式

-s将多个文件视为独立文件,而不是单个连续的长文件流

3.2 操作命令

“操作”用于指定对文件操作的动作行为,也就是 sed 的命令。通常情况下是采用的“[n1[,n2]]”操作参数 的格式。n1、n2 是可选的,代表选择进行操作的行数,如操作需要在 5~ 20 行之间进行,则表示为“5, 20 动作行为”。

常见操作

-a增加在当前行下面增加一行指定内容
-c替换将选定行替换为指定内容
-d删除删除选定的行
-i插入在选定行上面插入一行指定内容
-p打印如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
-s替换替换指定字符
-y字符转换

4. sed 的使用

sed [options] script filename

sed   [option]...   'script;script;...'           [input file...]

           选项         自身脚本语法       支持标准输入管道

  • options指的是sed的命令行参数,比较有限。
  • script是指需要对输入执行的一个或者多个操作指令,一般需要用单引号括起来,这样可以避免shell对 特殊字符的处理。sed会依次读取输入文件的每一行到缓存中并应用script中指定的操作指令,因此而带 来的变化并不会影响最初的文件(除非option加了-i参数)。
  • 每条操作指令由pattern和procedure两部分组成,顾名思义,pattern是匹配的规则,一般为用’/'分隔的 正则表达式(也有可能是行号,具体参见Sed命令地址匹配问题总结),而procedure则是一连串编辑命 令(action)。

总结:

  • sed命令+选项 ‘定位+动作+内容’ 文件名

5. 具体操作

注意:一般“ -n ” 和 “ -p ” 一起使用

5.1 打印输出  p

  • 查看文件内容
sed '' cs.txt 

  • 带有自动打印功能,p又再打印一遍
sed 'p' cs.txt 

sed -n 'p' cs.txt    ### -n  关闭自动打印功能

5.1.1 显示范围、单行、指定行输出、指定往后加几行输出
  • 显示范围

  • 显示单行

  • 显示指定行输出

  • 指定往后加几行输出

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

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

相关文章

《python程序语言设计》第6章12题 显示字符,使用下面的函数头,编写一个打印字符的函数

def printChars(ch1, ch2, numberPerLine):a ord(ch1)b ord(ch2)count 0for i in range(a, b 1):count 1print(chr(i), end" ")if count % numberPerLine 0:print()printChars("1", "Z", 10)

UDP/TCP协议解析

我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

FTTransformer,一个很能打的模型

FTTransformer,是一个BERT模型架构在结构化数据集上的迁移变体。和BERT一样,它非常能打。 它可能是少数能够在大多数结构化数据集上取得超过或者匹配LightGBM结果的深度模型。 本范例我们将应用它在来对Covertype植被覆盖数据集进行一个多分类任务。 我们…

k8s通过应用修改yaml文件修改容器时区

通过挂载,把本地的/etc/localtime挂载到容器中: apiVersion: apps/v1 kind: Deployment metadata:name: seb-algorithmsnamespace: jiaoda spec:replicas: 1selector:matchLabels:app: seb-algorithmstemplate:metadata:labels:app: seb-algorithmsspec…

虚幻引擎(Unreal Engine)深入探索与应用实践

目录 引言 虚幻引擎基础 引擎概述 核心组件 安装与配置 准备工作 安装步骤 常见问题 应用实践 游戏开发 影视特效 数字孪生 虚幻引擎中的C示例 如何在虚幻引擎中使用C代码 引言 虚幻引擎(Unreal Engine,简称UE)作为目前游戏开…

Ruoyi-WMS部署

所需软件 1、JDK:8 安装包:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.htmlopen in new window 安装文档:https://cloud.tencent.com/developer/article/1698454open in new window 2、Redis 3.0 安装包&a…

ZStack Cloud 5.1.8正式发布——GPU运维、物理机硬件监控、克隆云主机网络配置三大亮点简析

云轴科技ZStack Cloud云平台是遵循“简单、弹性、健壮、智能”的“4S”特性的私有云和无缝混合云产品。ZStack Cloud 5.1.8版本正式发布,从用户业务场景和实际需求出发,丰富和完善平台功能,推出一系列重要功能和多项改进,覆盖云主…

Oracle集群RAC磁盘管理命令asmcmd的使用

文章目录 ASM磁盘共享简介ASM磁盘共享的优势ASM磁盘组成ASM磁盘共享的应用场景Asmcmd简介Asmcmd的功能Asmcmd的命令Asmcmd的使用注意事项Asmcmd运行模式交互模式运行非交互模式运行ASMCMD命令分类实例管理命令:文件管理命令:磁盘组管理命令:模板管理命令:文件访问管理命令:…

产线工控安全新纪元:主机加固与防勒索病毒双剑合璧

在这个数字时代,企业面临的最大挑战之一就是如何确保数据的安全。随着勒索病毒等恶意软件的不断进化,传统的安全措施已经难以应对这些新型威胁。深信达公司的MCK主机加固系统,以其独特的内核级签名校验技术和深度学习驱动的业务场景白名单策略…

SpringMVC中的常用注解

目录 SpringMVC的定义 SpringMVC的常用注解 获取Cookie和Session SpringMVC的定义 Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它…

[k8s源码]5.自己写一个informer控制器

k8s的informer控制器有一个informer,有一个indexer,还需要一个队列来存储从kubernetes API获取的信息。 初始化自己的informer的结构 type Controller struct {indexer cache.Indexerinformer cache.Controllerqueue workqueue.RateLimitingInterf…

C#基础——类

类 类是一个数据类型的蓝图。构成类的方法和变量称为类的成员,对象是类的实例。类的定义规定了类的对象由什么组成及在这个对象上可执行什么操作。 class 类名 { (访问属性) 成员变量; (访问属性) 成员函数; } 访问属性:public(公有的&…

Python的mouse库防止计算机进入睡眠状态或锁定屏幕

目录 引言 安装 mouse 库 实现步骤 代码解析 注意事项 引言 在工作或娱乐过程中,我们有时会遇到计算机进入睡眠状态或锁定屏幕的情况,这会打断我们的任务.通过编写一个小程序,可以自动移动鼠标,从而防止计算机进入睡眠状态或锁定屏幕.本文将介绍如何使用 Python 的 mouse…

ElasticSearch(四)— 数据检索与查询

一、基本查询语法 所有的 REST 搜索请求使用_search 接口,既可以是 GET 请求,也可以是 POST请求,也可以通过在搜索 URL 中指定索引来限制范围。 _search 接口有两种请求方法,一种是基于 URI 的请求方式,另一种是基于…

python项目通过docker部署到Linux系统并实现远程访问

背景需求:在Windows系统编写了简单的python代码,希望能通过docker打包到Linux Ubuntu系统中,并运行起来,并且希望在本地Windows系统中能通过postman访问。 目录 一、原本的python代码 二、创建一个简单的Flask应用程序 三、创…

Linux下普通用户无法执行sudo指令

当执行sudo指令时出现: xxx(普通用户名字) is not in the sudoers file 说明在/etc/sudoers文件中没有把xxx加入到可执行sudo指令的名单中,因此需要修改sudoers文件。 解决方法:1、vim /etc/sudoers (要…

【PHP】系统的登录和注册

一、为什么要学习系统的登录和注册 系统的登录和注册可能存在多种漏洞,这些漏洞可能被恶意攻击者利用,从而对用户的安全和隐私构成威胁。通过学习系统的登录和注册理解整个登录和注册的逻辑方便后续更好站在开发的角度思考问题发现漏洞。以下是一些常见…

VINS-Fusion 回环检测pose_graph_node

VINS-Fusion回环检测,在节点pose_graph_node中启动。 pose_graph_node总体流程如下: 重点看process线程。 process线程中,将订阅的图像、点云、位姿时间戳对齐,对齐后分别存入image_msg、point_msg、pose_msg。pose_msg为VIO后端优化发布的位姿。 一、创建关键帧keyFram…

分享几种电商平台商品数据的批量自动抓取方式

在当今数字化时代,电商平台作为商品交易的重要渠道,其数据对于商家、市场分析师及数据科学家来说具有极高的价值。批量自动抓取电商平台商品数据成为提升业务效率、优化市场策略的重要手段。本文将详细介绍几种主流的电商平台商品数据批量自动抓取方式&a…

【CI/CD】docker + Nginx自动化构建部署

CI/CD是什么 CI/CD 是持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery)的缩写,它们是现代软件开发中用于自动化软件交付过程的实践。 1、…