shell脚本之“sed“命令

news2025/1/14 2:11:58

文章目录

  • 1.sed编辑器概述
  • 2.sed命令常用选项
  • 3.sed命令常用操作
  • 4.sed命令演示操作部分
  • 5.总结

1.sed编辑器概述

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中

sed的工作流程主要包括读取、执行和显示三个过程:

  • 读取: sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。

  • 执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行

  • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

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

常规使用方式:

cat  文件名 | (sed/awk/grep)

命令格式

sed -e '操作' 文件1 文件2 ...
sed -n -e '操作' 文件1  文件2   #-n忽略显示过程
sed -f 脚本文件 文件1 文件2 ...   #-f调用指定脚本文件中的命令     
sed -i -e '操作' 文件l 文件2 ...   #-i修改文件内容

sed -e 'n{    #n指定行号,在多少行执行以下命令操作
操作1
操作2
}' 文件1 文件2 ...

2.sed命令常用选项

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

3.sed命令常用操作

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

4.sed命令演示操作部分

sed命令查询演示操作部分:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@clr /opt]# sed -n '3{p;n;n;p}' ./test1  #从第三行开始打印,遇到n换行,又遇到n换行,打印输出
three
five
[root@clr /opt]# sed -n '1,${p;n;n;p}' ./test1  #从第1行开始,执行该操作到末尾结束
one
three
four
six
seven
nine
ten
twelve

在这里插入图片描述

在这里插入图片描述
sed命令删除演示操作部分:

在这里插入图片描述
删除空行的三种方法:

[root@clr /opt]# cat 文件名 | grep -v '^$'
[root@clr /opt]# cat 文件名 | tr -s '\n
[root@clr /opt]# cat 文件名 | sed '/^$/d

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

替换

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

4种替换标记:

替换标记标记含义
数字表明新字符串将替换第几处匹配的地方
g表明新字符串将会替换所有匹配的地方
p打印与替换命令匹配的行,与-n一起使用
w文件将替换的结果写到文件中

sed命令替换演示操作部分:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对指定修改操作内容另指定到保存文件的两种方式;

在这里插入图片描述

自定义分割符的使用;

在这里插入图片描述

在这里插入图片描述

sed 'y/145/ABC/' test  #将该文件内所有的1字符转换成A,所有的2字符转换成B,所有的3字符转换成c

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sed的分组操作;

在这里插入图片描述

5.总结

查询

命令操作操作含义
sed -n ‘行号 p’打印指定行号的行
sed -n ‘行1,行2 p’打印行1与行2区间的行
sed -n ‘行1,+np’打印行1与其之后连续n行
sed -n ‘/字符串/ p’打印包含字符串的行
sed -n ‘/正则表达式/ p’打印所有包含正则能够匹配到内容的行

删除

命令操作操作含义
sed ‘行号d’删除指定行号的行
sed ‘行1,行2 d’删除行1与行2区间的行
sed ‘/字符串/d’删除包含字符串的行
sed ‘/正则表达式/d’删除所有包含正则能够匹配到内容的行
sed ‘/字符串1/,/字符串2/d’从第一个包含字符串1的行开始删除到第一个包含字符串2的行,之后的行会重复之前的规则操作
sed ‘行号,/字符串/d’删除从指定行到第一个包含字符串的行

替换

命令操作操作含义
sed ‘s/旧字符串/新字符串/’替换匹配行的第一个对应的字符串
sed ‘s/旧字符串/新字符串/2’替换匹配行的第二个对应的字符串
sed ‘s/旧字符串/新字符串/g’替换匹配行的所有对应的字符串
sed ‘s/旧字符串/新字符串/gw file’把替换后的行内容保存到指定文件
sed -n ‘s/旧字符串/新字符串/gp’ > file把替换后的行内容重定向写入到指定文件
sed ‘行号 s/旧字符串/新字符串/g’替换指定行的对应的字符串
sed '行1,行2 s/旧字符串/新字符串/g’替换行1与行2区间的匹配行的对应的字符串
sed ‘/字符串/ s/旧字符串/新字符串/g’替换匹配指定字符串的行内容
sed ‘/正则表达式/ s/旧字符串/新字符串/g’替换匹配到正则表达式的行内容
sed ‘行号c XXXX’替换指定行的整行内容
sed ‘y/abc/123/’替换所有相对应的字符

自定义分隔符

命令操作操作含义
s/xx/Xx/后面的替换分隔符可以使用其他字符代替,需要确保三个分隔字符保持一致

插入

命令操作操作含义
sed ‘行号a XXXX’在指定行下面插入内容
sed ‘/字符串/a XXXX’在匹配到字符串内容行下面插入内容
sed ‘行号i XXXX’在指定行上面插入内容
sed ‘/字符串/i XXXX’在匹配到字符串内容行上面插入内容
sed ‘行号r file’在指定行下面读取文件内容

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

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

相关文章

C嘎嘎~~[类 下篇 之 日期类的实现]

类 下篇 之 日期类的实现 6.const成员6.1 const成员的引入6.2const成员的概念 7.日期类的实现 6.const成员 6.1 const成员的引入 class Date { public:// 构造函数Date(int year 2023, int month 5, int day 5){_year year;_month month;_day day;}void Print(){cout &…

【STL】vector的使用

目录 前言 默认成员函数 构造函数 拷贝构造 赋值重载 迭代器 正向迭代器 反向迭代器 容量管理 查看容量和大小 扩容 判空 访问数据 下标访问 边界访问 数据修改 尾插尾删 指定位置插入删除 迭代器失效 清空 ​编辑 交换 查找数据 vector可以代替strin…

VOACAP 软件的简单介绍

VOACAP 软件可以预测短波通信中的最高可用频率、最佳传输频率、角度、延迟、反射点高度、信噪比、收发增益等参数,它可以直接输出文本文件,或者以图表输出,同时,它也可以绘制某一参数随时间、距离的变化图表。 该软件的下载安装可…

C语言从入门到精通第18天(指针和函数的联用)

指针和函数的联用 一级指针作为函数的形参二级指针 一级指针作为函数的形参 当函数的形参为数组时,我们定义函数如下: 语法: 数据类型 函数名(数据类型 数组名) 例如 : void func(int a[],int a){ 语句; } 但是在实际使用中我们通常用指针的形式进行…

GEE:如何进行对MOD09GA数据集进行水体/云掩膜并计算NDVI将其导出至云盘?

目录 01 为什么用GEE而不是传统的下载ENVIArcGIS? 02 操作详解 01 为什么用GEE而不是传统的下载ENVIArcGIS? 由于地理空间数据云中缺少2015年10月份的NDVI月合成影像,于是查看了地理空间数据云的NDVI数据集处理的一些介绍如下(地理空间数据…

【Linux内核】信号量semaphore机制

信号量实现方法 信号量机制是一种用于控制并发访问的同步机制,常用于多进程或多线程之间的协调。在Linux内核中,信号量机制是通过struct semaphore结构体来实现的。 每个semaphore结构体包含一个计数器和一个等待队列,它们用于跟踪当前可用…

Linux 并发与竞争

一、并发与竞争 1、并发 Linux 系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些任务可 能会相互覆盖这段内存中的数据,造成内存数据混乱。 多线程并发访问, Linux 是多任务(线程)的系统,所以多线…

命令firewalld和firewall-cmd用法

firewalld命令跟firewall-cmd 1.启动firewalld服务 systemctl start firewalld.service2.关闭firewalld服务 systemctl stop firewalld.service3.重启firewalld服务 systemctl restart firewalld.service4.查看firewalld状态 systemctl status firewalld.service5.开机自启…

接口测试怎么做?全网最详细从接口测试到接口自动化详解,看这篇就够了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 抛出一个问题&…

孙鑫VC++第三章 2.基于MFC的程序框架剖析

目录 1. MFC向导生成类 2. 框架流程 2.1 WinMain 2.2 全局对象:theApp 2.3 AfxWinMain函数 1.AfxWinMain: 2.AfxGetThread函数(thrdcore.cpp): 3.AfxGetApp是一个全局函数,定义于(afxwin1…

原型/原型链/构造函数/类

认识构造函数 为什么有构造函数 因为一般的创建对象的方式一次只能创建一个对象, 利用工厂模式创建的对象,对象的类型都是Object类型 什么是构造函数 构造函数也称之为构造器(constructor),通常是我们在创建对象时会调用的函数…

Uni-app项目应用总结(一)

目录 一.新建uniapp项目 第一步:下载HBuilder 第二步:创建uni-app项目 第三步:运行uni-app 二.uni-app组件使用 三.uni-app路由跳转  1.页面路由配置    (1)在pages.json中配置页面路由    (2)在pages.json中配置底部导航栏 2.路由跳转方法…

【输配电路 DZY-104端子排中间继电器 接通、信号转换 JOSEF约瑟】

DZY-104端子排中间继电器品牌:JOSEF约瑟型号:DZY-104名称:端子排式中间继电器触点容量:5A/250V功率消耗:≤1.5W/≤3W/≤7W/≤3VA/≤7VA/≥5W绝缘电阻:≥10MΩ 系列型号: DZY-101端子排中间继电器; DZY-104端子排中间继电器; DZY-105端子排…

华南农业大学|图像处理与分析技术综合测试|题目解答:求芒果单层坏损率

设计任务 对于一幅芒果果实内部的 CT 断层图像,试采用图像处理与分析技术,设计适当的算法和程序,首先分割出其中的坏损区域,然后计算其像素面积占整个果肉区域的百分比(单层坏损率)。请按统一要求写出算法…

nuc980 uboot 2017.11 移植:env 保存位置选择问题

开发环境 Win10 64位 ubuntu 20.04 虚拟机 VMware Workstation 16 Pro 开发板:NK-980IOT(NUC980DK61Y) gcc 交叉编译工具链: ARM 官方 gcc version 11.2.1 20220111 NUC980 uboot 版本 :尝试移植到 u-boot-2017.1…

科普 “平均工资又涨了”

周四晚上做了一个图,发了一则朋友圈,科普了一下为什么平均工资一直在涨: 曲线是 drawio 画的,不是类似 geogebra 画的精确数学函数,误差比较大,但大概就是这个意思。 收入应该是无标度分形的幂律分布&am…

孙鑫VC++第三章 4.窗口类、窗口类对象与窗口三者之间关系

目录 1. 创建CWnd 2. WinMain 3. 创建CButton 1. 创建CWnd 模拟CWnd类的封装过程。在解决方案ch04下添加一个新的空项目,项目名称为:WinMain,在项目创建完成后,将WinMain项目设为启动项目。 接下来在WinMain项目中添加一个名…

【C++ 学习 ④】- 类和对象(下)

目录 一、初始化列表 1.1 - 定义 1.2 - 使用初始化列表的原因 1.3 - 成员变量的初始化顺序 二、静态成员 2.1 - 静态成员变量 2.2 - 静态成员函数 三、友元 3.1 - 友元函数 3.2 - 友元类 四、内部类 五、匿名对象 5.1 - 匿名对象的特性 5.2 - 匿名对象的使用场景…

3.View的绘制流程

View是在什么时候显示在屏幕上面的?(如:MainActivity的布局文件activity_main.xml) setContentView最终的结果是将解析的xml文件中的View添加到DecorView中. 那么这个DecorView是什么时候添加到Window(PhoneWindow)的呢? DecorView是在ActivityThread.java的handleResumeA…

2-Zookeeper单机版安装

2-Zookeeper单机版安装 本文介绍的是 Linux 系统下 Zookeeper 安装方式 ① 下载 进入官网 https://zookeeper.apache.org/ 点击下载按钮 进入下载页 https://zookeeper.apache.org/releases.html 后选择 最新的稳定版本,如下: 3.7.1 为最新的稳定版本…