shell脚本 sed工具

sed(stream editor)流编辑器,Linux下一款功能强大的非交互流式文本编辑器,

(vim式交互式文本编辑器),可以对文本文件的每一行数据匹配查询之后

进行增删改查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,

适合大文件的编辑

一次处理一行内容, 将这行放入缓存(存区空间称为:模式空间),

然后才对这行进行处理,处理完后,将缓存区的内容发送到终端。

选项参数功能
-e直接在指令列模式上进行sed的动作编辑。它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项;一行命令语句可以执行多条sed命令
-i直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-f后跟保存了sed指令的文件
-n取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
-r ruguler使用扩展正则表达式,默认情况sed只识别基本正则表达式 *
命令功能描述
aadd新增,a的后面可以接字串,在下一行出现
cchange更改, 更改匹配行的内容
ddelete删除, 删除匹配的内容
iinsert插入, 向匹配行前插入内容
pprint打印, 打印出匹配的内容,通常与-n选项和用
ssubstitute替换, 替换掉匹配的内容
=用来打印被匹配的行的行号
n读取下一行,遇到n时会自动跳入下一行

向文件中添加数据

sed '3ahello' sed.txt        向第三行后添加hello

sed '3ihello' sed.txt         向第三行前添加hello

这里并未修改源文件         添加-i命令修改源文件         sed -i '3ahello' sed.txt

sed '/abc/ahello' sed.txt        向abc后面添加 hello,若文件中多行包括abc,则每行后都会添加

sed '/abc/ihello' sed.txt        /是通配符 向文件中所有abc的 前面添加hello

sed '$ahello' sed.txt        $表示最后一行 在最后一行后添加 hello

sed '$ihello' sed.txt        最后一行前添加 hello

删除文件中的数据

sed '2d' sed.txt        删除该文件的第二行

sed '1d;4d' sed.txt         删除第1,4行

sed '1~2d' sed.txt         删除奇数行,从第一行开始删除,每个两行删掉一行

sed '1,3d' sed.txt         删除指定范围行数据。删除第1到3行数据

sed '1,3!d' sed.txt         对1,3! 取反进行删除,除去1到3行的数据,删除剩下行数据

sed '$d' sed.txt         删除最后一行数据

sed '/abc/d' sed.txt         删除匹配abc的行数据

sed '/abc/,$d' sed.txt         删除匹配行 到 最后一行的数据

sed '/abc/,+1d' sed.txt        删除匹配行及其下一行的数据

sed '/abc\|adc/!d' sed.txt         删除不匹配abc 或 adc 的行数据

 这里的 | 或  需要转义  \|        !取反

更改文件数据

sed  '1chello'  sed.txt        修改文件第一行为hello

sed  '/abc/chello' sed.txt        将包含abc的行修改为hello

sed '$chello' sed.txt        将最后一行修改为hello

sed 's/abc/hello/'  sed.txt        将文件中abc 替换为hello         默认替换每行第一个abc

sed 's/abc/hello/g'  sed.txt        将文件中所有abc替换        g表示匹配全局符合的字符

sed 's/abc/hello/2' sed.txt         将每行匹配的第二个替换为hello

sed 's/abc/hello/2w sed2.txt' sed.txt        将每行中第二个匹配的itheima替换为hello , 将替换后的内容写入到sed2.txt文件中        w命令写入

sed -n 's/abc/hello/2pw sed2.txt' sed.txt           

sed '/i/s/t.*//g' sed.txt        正则表达式匹配替换,t.* 表示 t后面的所有字符,不限个数

匹配有 i 的行,替换匹配行中 t 后的所有内容为空

sed 's/$/& test' sed.txt        每行末尾拼接test

sed 's/^/#/' sed.txt        每行行首添加注释 #

查询文件 或 管道中的数据

sed -n '/abc/p' sed.txt        查询含有 abc 的行数据

ps -aux | sed -n '/sshd/p'        管道过滤查询

sed -e '1d' -e 's/abc/adc/g' sed.txt         执行多个sed程序命令,删除第1行,替换abc为adc全部

sed  '1d;s/itheima/itcast/g' sed.txt                方式2

sed高级用法,缓存区数据交互

  1. 首先需要明白, sed处理文件是逐行处理的, 即读取一行处理一行,输出一行;

  2. sed把文件读出来每一行存放的空间叫模式空间, 会在该空间中对读到的内容做相应处理;

  3. 此外sed还有一个额外的空间即暂存空间, 暂存空间刚开始里边只有个空行, 记住这一点;

  4. sed可使用相应的命令从模式空间往暂存空间放入内容或从暂存空间取内容放入模式空间;

h模式空间里面的内容复制到暂存空间缓存区(覆盖方式)
H模式空间里面的内容复制到暂存空间缓存区(追加方式)
g暂存空间里面的内容复制到模式空间缓存区(覆盖方式)
G暂存空间里面的内容复制到模式空间缓存区(追加方式)
x交换2个空间的内容

sed '1h;$G' sed.txt        第一行粘贴到最后一行
# 1h 从模式空间中将第一行数据复制到暂存空间(覆盖方式)
# $G 将暂存空间中的内容复制到模式空间中最后一行(追加方式)

sed '1{h;d};$G' sed.txt        第一行删除后粘贴到最后一行
# 1{h;d}对模式空间中的第一行数据 进行复制到暂存空间(覆盖方式)和删除模式空间中的第一行

sed '1h;2,$g' sed.txt        第一行数据复制 粘贴替换其他行

sed '1,3H;$G' sed.txt        前三行数据复制粘贴到最后一行

sed G -i sed.txt        G暂存空间内容复制到模式空间,暂存空间有空行,完成每行添加空行的操作
# G 每行后面添加一个空行
# -i 修改源文件

sed -i '/^$/d' sed.txt        -i 修改源文件, ^表示文件第一行,$表示文件最后一行, d表示删除,

^$之间什么也没有表示 删除所有空行

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

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

相关文章

类和对象(一)

目录 前言 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 3.1 类定义的两种方式 3.2 成员变量命名规则建议 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5.类的作用域 6.类的实例化 7.类对象模型 8.this指针 8.1 this指针的特性 前言 今天小编就开始给…

【HTML+CSS+JS】登录注册页面大合集

前言 学JS也学了一段时间,正巧碰上了人工智能要调用人脸识别接口进行真人人脸识别,于是便萌生了用人脸来进行注册和登录的想法,这样的话就需要开发一个登录注册页面,然后用JS绑定注册事件调用人脸识别接口进行登录注册 饭要一口一…

网络安全之密码学

目录 密码学 定义 密码的分类 对称加密 非对称加密 对称算法与非对称算法的优缺点 最佳解决办法 --- 用非对称加密算法加密对称加密算法的密钥 非对称加密如何解决对称加密的困境 密钥传输风险 密码管理难 常见算法 对称算法 非对称算法 完整性与身份认证最佳解决…

PAVC100R4222 PARKER轴向柱塞泵

PAVC100R4222 PARKER轴向柱塞泵特点: 1、壳体为高强度铸铁 2、两段设计便于维护 3、全密封的轴用轴承 4、内置增压器***高转速性能,可达3000 RPM( PAVC100为2600 RPM) 5、控制器为插装形式,易于现场更换 6、配流盘为可替换的青铜复合 10、过滤…

2016 ICPC合肥站 传递 HDU-5961(拓扑排序 / bitset / 暴力(可hack))

题目链接:HDU-5961 传递 中文题面就不解释题目意思,解释一下名词的意思 完全图:对于一个无向图 G G G 而言,设点集为 V V V,点集中任意不相同两点 u , v u, v u,v 间都有且仅有一条边叫做完全图。 竞赛图&#xff1…

刚转岗做项目经理,无从下手,怎么办?

01 背景 最近在知乎平台看到一个问题是这么说的: 或许很多人都不是从工作开始就是项目专员再到项目经理这里一步一步过来,而是从其他岗位比如售前、销售、产品经理、程序员等转到项目经理岗位的。 那么对于这些人来说,做项目经理会有什么问…

Packet Tracer - 静态路由故障排除

Packet Tracer - 静态路由故障排除 地址分配表 设备 接口 IPv4 地址 子网掩码 默认网关 R1 G0/0 172.31.1.1 255.255.255.128 不适用 S0/0/0 172.31.1.194 255.255.255.252 不适用 R2 G0/0 172.31.0.1 255.255.255.0 不适用 S0/0/0 172.31.1.193 255.255…

什么是http代理504网关超时错误,要如何修复?

当你在使用 HTTP 代理时,有时候会遇到"504 网关超时"错误,这个错误看起来非常可怕,但实际上它并不是一个很难解决的问题。在本文中,我将向你介绍 504 错误的定义,以及为什么我们会遇到这个错误,同…

论文笔记——chatgpt评估+

文章目录 1. chatgpt 效果评估:Evaluating ChatGPT’s Information Extraction Capabilities: An Assessment of Performance, Explainability, Calibration, and Faithfulness文章简介文章结论 2. 事件抽取: OneEE: A One-Stage Framework for Fast Overlapping an…

UAD142A01 3BHE012551R0001使用以太网交叉电缆,您也可以直接连接。

​ UAD142A01 3BHE012551R0001使用以太网交叉电缆,您也可以直接连接。 如何将 MicroLogix PLC 连接到计算机并将程序下载到 MicroLogix 1100 MicroLogix PLC由美国罗克韦尔自动化旗下知名工业自动化厂商Allen-Bradley设计。MicroLogix 1100 主要用于小型工业。我们在…

山东专升本计算机第一章-计算机信息技术与计算机文化

计算机信息技术与计算机文化 计算机中的信息表示 数制及其转换 数制:用进位的原则进行计数数码:数制中表示基本数值大小的不同数字符号基数:一种数制所使用的数码个数位权:数码在不同位置的权值 数制的转换 • R进制转化为十进…

【五一创作】【远程工具】- Tabby 下载、安装、使用、配置【ssh/Serial】-免安装、解压即用

目录 一、Tabby 概述 二、Tabby 下载、安装 三、Tabby 的使用  👉3.1 使用SSH协议连接Linux开发主机  👉3.2 使用Serial(串口)协议连接开发板 一、Tabby 概述 在远程终端工具中,secureCrt 和 XShell 是两款比较有名的远程工具,但…

【计算机图形学】图形变换(以任意直线为对称轴的对称变换)

模块3-2 图形变换 一 实验目的 编写图形各种变换的算法 二 实验内容 1:任意直线的对称变换。要求将变换矩阵写在实验报告中,并与代码匹配。求对任意直线AxByC0的对称变换矩阵。 实验结果如下图所示: 1:预设图形初始化 2&#…

数据结构——链表(python版)

一、链表简介 链表是一种在存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针链接次序实现。链表是由一系列的结点组成,结点可以在运行时动态生成。每个结点包含两部分:数据域与指针域。数据域存储数据元素,指针域…

TCP的三次握手和四次挥手

三次握手 既然我们文章要说的是TCP的三次握手,和四次挥手,那么肯定是说的连接,也不是说的不其他的。那么它这个连接的过程说的是什么呢? 我们还是从图中理解,这样比较好理解, TCP第一次握手:服…

gradle Task 详解

目录 Task定义和配置 Task的执行阶段 Task 的依赖 Task 指定执行顺序 Task 主gradle引入其他的gradle文件 将某一个task挂载到指定的task之后执行 gradle task官网:Task - Gradle DSL Task定义和配置 查看工程下所有的task,使用如下命令 gradle …

【Linux】浅谈eloop机制

目录 1.eloop 机制 2.eloop结构体 2.1.eloop_data结构体 2.2 Socket事件结构体 2.3 Timeout事件结构体 2.4 Signal事件结构体 3.eloop_init 4.eloop_run 4.1 signal事件 4.2 socket事件 4.3 timeout事件 1.eloop 机制 主线程中启动事件监听机制,对不同的…

深度学习模型压缩与优化加速

1. 简介 深度学习(Deep Learning)因其计算复杂度或参数冗余,在一些场景和设备上限制了相应的模型部署,需要借助模型压缩、系统优化加速、异构计算等方法突破瓶颈,即分别在算法模型、计算图或算子优化以及硬件加速等层…

如何优雅地停掉线程?

很久很久以前,在一个名为“Springboot”的村庄中,住着一群热爱编程的程序员。他们喜欢探索新技术、优化自己的代码,为了打造更好的软件而不断努力着。 在这个村庄中,有一个名叫小明的程序员,他是村庄中最优秀的程序员…

一文打通java中内存泄露

目录 前置知识 内存泄漏(memory leak) 内存溢出(out of memory) Java中内存泄露的8种情况 静态集合类 单例模式 内部类持有外部类 各种连接,如数据库连接、网络连接和IO连接等 变量不合理的作用域 改变哈希值 …
最新文章