Linux:文本三剑客之sed编辑器

Linux:sed编辑器

  • 一、sed
    • 1.1 sed编辑器
    • 1.2 sed编辑器的工作流程
    • 1.3 命令格式
    • 1.4常用选项
    • 1.5 常用操作
    • 1.6 实际应用

一、sed

1.1 sed编辑器

  • sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
  • sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中

1.2 sed编辑器的工作流程

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

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

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

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

1.3 命令格式

sed -e '操作' 文件1 文件2 ...      #-e后面跟操作,也可以根下面一样用大括号跟多个操作#
ed -e 'n{                      
操作1
操作2
...
}' 文件1 文件2 ...
sed -n -e '操作' 文件1 文件2 ... #sed命令默认会把执行的内容发到屏幕上,-n可省略,不加-n加p的话会把操作的行
sed -f 脚本文件 文件1 文件2 ...
sed -i -e '操作' 文件1 文件2 ...

1.4常用选项

选项说明
-e 或 --expression=用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f 或 --file=用指定的脚本文件来处理输入的文本文件
-h 或 --help显示帮助
-n、--quiet 或 silent禁止sed编辑器输出,但可以与p命令一起使用完成输出
-i直接修改目标文本文件(先实验,确定没问题再用,并且备份源文件)

1.5 常用操作

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

1.6 实际应用

  • 查询
sed -n '行号 p'      #打印指定行号的行#
sed -n '行1,行2 p'  #打印行1与行2区间的行#
sed -n '1,+n p‘     #打印行1与其之后连续n行#
sed -n ’/字符串/ p'  #打印包含字符串的行#
sed -n ‘/正则表达式/ p' #打印包含字符串的行#
  • 删除
sed '行号 d'               #删除指定行号的行#
sed '行1,行2 d'            #删除行1与行2区间的行#
sed '/字符串/ d'           #删除包含字符串的行#
sed '/正则表达式/ p'        #删除所有包含正则能够匹配的到内容的行#
sed '行号,/字符串/ d'       #删除从指定行到第一个包含字符串的行#
sed '/字符串1/,/字符串2/ d' #从第一个包含字符串1的行开始删除到从第一个包含字符串2的行,之后的行会重复之前的规则操作#
  • 替换
sed 's/旧字符串/新字符串/'             #替换匹配行的第一个对应的字符串#
sed 's/旧字符串/新字符串/2'            #替换匹配行的第二个对应的字符串#
seds '/旧字符串/新字符串/g'            #替换匹配行的所有对应的字符串#
seds '/旧字符串/新字符串/gw file'      #把替换后的行内容保存到指定文件#
sed -n 's/旧字符串/新字符串/gp’ > file #同上#
sed '行号 s/旧字符串/新字符串/g'        #替换指定行的对应的字符串#
sed '行1,行2 s/旧字符串/新字符串/g'     #替换行1与行2区间的匹配行的对应的字符串#
sed '/字符串/ s/旧字符串/新字符串/g'    #替换带有字符串的行,把旧字符全换成新字符#
sed '/正则表达式/ s/旧字符串/新字符串/g' #替换满足匹配条件的行,把旧字符全换成新字符#
s/xx/XX/                             #后面的替换分隔符可以使用其他字符代替,需要确保三个分隔字符保持一致#
例子:s?xx?XX?                        #像/bin/bash/这种换成其他字符,就需要再斜杠前面加反斜杠,那个时候会看的很累,所以可以用别的字符来代替,例如’?‘之类#
sed '行号c XXXX'                      #替换指定行的整行内容#
sed 'y/abc/123/'                     #替换所有相对应的字符#
sed 's/.*字符串.*/#&/'                #'&'代表前面匹配到结果的行,在前面加个’#‘#
  • 插入
sed '行号a xxxx'                                  #在指定行下面插入内容#
    '/字符串/a xxxx'
sed '行号i xxxx'                                  #在指定行上面插入内容#
    '/字符串/i xxxx'
sed '行号r file'                                  #在指定行下面读取文件内容#
sed '/root/(H;d);$G' /etc/passwd                  #将包含root的行剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后,没有d的话,有复制粘贴的意思,有d的话,是剪切粘贴的意思#
sed '1,3H;5,7G‘  /etc/passwd                      #将1到3行的内容复制到5到7行下面#
echo ”111222333“ | sed -r 's/(111)(222)/\2\1/'    #将字符 111 和 222 互换位置#
echo "111222333" | sed -r 's^(.)(.*)(.)$/\3\2\1/' #将第一个字符和最后一个字符互换#
  • 例子
sed -n -e '=' -e 'p' b.txt #只执行一个操作的情况下-e加不加效果一样#
one
two
...

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

cat b.txt | sed -n '=;p' #多个命令之间可以用’;‘来进行分割#
1
one
2
two
...

在这里插入图片描述

在这里插入图片描述

cat a.txt | sed -n '3p' #’p'前面加数字,表示打印指定行的内容#
100
cat a.txt | sed -n '$p' #‘$p'表示最后一行的内容#
777
cat a.txt | sed -n '8,$p' #第八行到最后一行的内容,用’,‘分割#
333
34
...
cat a.txt | sed -n '8p;$p' #只显示第八行和最后一行的内容,用’;‘表示前一个结束#
333
777
cat a.txt | sed -n '8,+3p' #显示第八行以及它后面连续的3行#
333
34
333
444
cat a.txt | sed '8q' #显示前8行然后退出#
1
10
100
...
3
333
cat b.txt | sed -n 'p;n' #只显示奇数行#
one
three
...
thirteen
cat b.txt | sed -n 'n;p' #只显示偶数行#
two
four
...
tweleve

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

cat b.txt "| sed -n '2,${n,p} #从第二行开始到结尾,执行先换行再打印的命令#
three
five
seven
nine
eleven
thirteen

在这里插入图片描述

sed -n '/^root/p' /etc/passwd        #过滤出以root开头的行#
sed -nr -e '/root|ftp/p' /etc/passwd #包含root或者ftp的行,因为‘|’是特殊符号,前面要么加-r,要么管道符前面加反斜杠#
sed -n '2,/ftp/' /etc/passwd         #从第二行开始到第一个带有ftp行结束#

在这里插入图片描述

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

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

相关文章

FE_Vue学习笔记 常用指令的学习【v-model filters v-text v-html v-cloak v-once v-pre 自定义指令】

1 收集表单数据 v-model 收集表单数据&#xff1a; 若&#xff1a;<input type"text">&#xff0c;则v-model收集的是value的值&#xff0c;用户输入的就是value值。 若&#xff1a;<input type"radio">&#xff0c;则v-modle收集的是value的…

浏览csdn博客自动隐藏侧边栏并只看目录

背景 CSDN 总算做了点好事&#xff0c;能够隐藏大部分无关信息&#xff0c;只看博客内容本身。具体如图&#xff0c;还在测试版 以我的一篇博客为例&#xff0c;原始界面&#xff0c;花里胡哨一堆 点击隐藏侧栏后的清爽版 点击只看目录后的清爽版 前提提要 安装油猴脚本&…

OLS样本估计量抽样分布模拟

OLS样本估计量抽样分布模拟 文章目录 OLS样本估计量抽样分布模拟1 OLS估计量分布2 R语言实现 1 OLS估计量分布 对于线性回归方程 Y β 0 β 1 X ε Y \beta_0\beta_1 X \varepsilon Yβ0​β1​Xε 利用普通最小二乘法(OLS&#xff09;估计上述方程参数使的假定(之一)是…

[译] Flutter 3.10 的新功能

[译] Flutter 3.10 的新功能 原文 https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73 无缝的Web和移动端集成&#xff0c;Impeller稳定版的突破性图形性能&#xff0c;以及更多 欢迎使用Flutter 3.10&#xff01;我们非常期待展示我们令人惊叹的Flutter社区所…

示波器的数据处理怎么记录?

示波器的使用 - 记录和保存示波器测试结果 安泰测试为您分享如何记录示波器的数据。 "从您把示波器探头连接到器件的那一刻起&#xff0c;信号就开启了一次瞬间即可完成的重大旅程。它必须 跨过五个不同的“模块”&#xff0c;才能完成从器件到示波器&#xff0c;最后返回…

十五、Gateway网关

目录 Zuul网关和gateway网关的区别&#xff1a; Gateway路由配置 1、新建服务网关项目&#xff0c;并在项目pom文件中引入gateway网关依赖 2、在application.yml配置gateway 3、如果不用配置的方式配置gateway路由&#xff0c;还可以通过代码的形式配置 4、启动网关服务&…

Reed-Muller序列

Reed-Muller函数的由来 我们知道对于连续信号&#xff0c;时间和频率是对偶域(duality)&#xff0c;其中正弦函数是时移的特征函数&#xff08;where sinusoids are eigenfunctions of time shifts&#xff09;。而在汉明空间(Hamming space)中&#xff0c;there are discrete…

【软考|软件设计师】某计算机系统的CPU主频为2.8GHz

目录 题&#xff1a; CPI MIPS 题&#xff1a; 某计算机系统的CPU主频为2.8GHz。某应用程序包括3类指令&#xff0c;各类指令的CPI &#xff08;执行每条指令所需要的时钟周期&#xff09;及指令比例如下表所示。执行该应用程序时 的平均CPI为______&#xff1b; 运算速度…

ASP.NET Core 8 中身份验证的改进

ASP.NET Core 团队正在改进 .NET 8 中的身份验证、授权和身份管理(统称为“身份验证”)。新的 APIs 将使自定义用户登录和身份管理体验变得更加容易。新的端点将在没有外部依赖的单页应用程序(SPA)中启用基于令牌的身份验证和授权。我们还将改进我们的指引和文档&#xff0c;使…

基于SSM+JSP的人体健康信息管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

JMeter入门配置

目录 场景&#xff1a; 环境及工具 &#xff1a; JMeter中文配置&#xff1a; 配置登录接口&#xff1a; 配置响应结果&#xff1a; 配置json提取器 测试json提取器 配置Beanshell后置处理器&#xff1a; http请求右键-->添加---->后置处理器--->Beanshell后置处理…

第五章 面向对象-7.hashCode()和toString()

hashCode()和toString() hashCode() hashCoed 的特性&#xff1a; &#xff08;1&#xff09;HashCode的存在主要是用于查找的快捷性&#xff0c;如Hashtable&#xff0c;HashMap等&#xff0c;HashCode经常用于确定对象的存储地址&#xff1b; &#xff08;2&#xff09;如果…

MySQL基础(二十九)数据库的设计规范

1 范式 1.1 范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。可以理解为&#xff0c;一张数据表的设计结 构需要满足的某种设计标准的 级别 。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。 1.2 范式都包括哪些 目…

医院内导航及智能导医,医院导诊图怎么制作?

在大型综合性医院&#xff0c;由于专业分工精细&#xff0c;一个诊疗过程涉及的功能单元往往分布在不同的楼宇、不同楼层的不同位置&#xff0c;再加上多数患者对医院环境不熟悉&#xff0c;导致滞院的时间长、诊疗效率低、患者对服务的满意度下降。为解决这一问题&#xff0c;…

空中下载技术(OTA)电控信息安全

随着汽车电子控制系统功能复杂度和数据颗粒度呈阶梯式增加&#xff0c;其发展速度逐渐超越网络安全防护方法、技术和标准的发展&#xff0c;现阶段汽车电子正面临巨大的网络信息安全风险&#xff0c;对功能安全的潜在影响也仍在探索和解决中&#xff0c;信息安全问题已经成为影…

C++ 中到底是应该include .h文件还是应该include .cpp文件

在阅读一个较大的解决方案中&#xff0c;对于其他文件夹下的.h和.cpp文件&#xff0c;有时候#include“XXX.h”文件&#xff0c;有时候是#include“XXX.cpp”文件&#xff0c;而且二者还不能更换。下面就好好分析一下他们二者的区别。 测试 测试&#xff1a;XXX.h和XXX.cpp…

Linux内核(十四)Input 子系统详解 IV —— 配对的input设备与input事件处理器 input_register_handle

文章目录 input_handle结构体详解配对的input设备与input事件处理器实例input核心层对驱动层和事件层之间的框架建立流程图 本文章中与input子系统相关的结构体可参考input子系统结构体解析 input函数路径&#xff1a;drivers/input/input.c input_handle结构体详解 input_ha…

(转)雪花算法(SnowFlake)

简介 现在的服务基本是分布式、微服务形式的&#xff0c;而且大数据量也导致分库分表的产生&#xff0c;对于水平分表就需要保证表中 id 的全局唯一性。 对于 MySQL 而言&#xff0c;一个表中的主键 id 一般使用自增的方式&#xff0c;但是如果进行水平分表之后&#xff0c;多…

第八章结构型模式—装饰者模式

文章目录 装饰者模式解决的问题概念结构 案例使用装配者进行改进 使用场景JDK源码分析 静态代理和装饰者的区别 结构型模式描述如何将类或对象按某种布局组成更大的结构&#xff0c;有以下两种&#xff1a; 类结构型模式&#xff1a;采用继承机制来组织接口和类。对象结构型模式…

【Wi-Fi】802.11/802.11b/802.11g/802.11n/802.11a/802.11ac/802.11ax/802.11be

WiFi发展历史 IEEE 802.11 Protocol Release Date Frequency Band Bandwidth Max Throughput 802.11-1997 1997 2.4GHz 22MHz 2Mbps 802.11b 1999 2.4GHz 22MHz 11Mbps 802.11a 1999 5GHz 20MHz 54Mbps 802.11g 2003 2.4GHz 20MHz 54Mbps 802.11n (W…