Sed工具

文章目录

  • 一、sed是什么
  • 二、sed的常用操作选项
  • 三、如何使用sed
    • 1.Sed结合正则表达式输出指定行
    • 2.增加内容
    • 3.删除
    • 4.替换
    • 5.搜索替换
    • 6.插入文件
    • 7.另存为到文件
    • 8.同时编辑
    • 9.分组操作
    • 10.读取完退出
    • 11.sed脚本
    • 12.sed的高级应用

一、sed是什么

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

二、sed的常用操作选项

常见的 sed 命令选项主要包含以下几种。
-e :表示用指定命令或者脚本来处理输入的文本文件。
-f :表示用指定的脚本文件来处理输入的文本文件。
-h :显示帮助。
-n:表示仅显示处理后的结果,通常和操作的p一起使用。
-i.bak:直接编辑文本文件,并把原始文件保存进原文件名+.bak中。
-r, -E 使用扩展正则表达式
-s 将多个文件视为独立文件,而不是单个连续的长文件流“操作”用于指定对文件操作的动作行为,也就是 sed 的命令。通常情况下是采用的“[n1[,n2]]”操作参数
的格式。n1、n2 是可选的,代表选择进行操作的行数,如操作需要在 5~ 20 行之间进行,则表示为“5,
20 动作行为”。常见的操作包括以下几种。
a:增加,在当前行下面增加一行指定内容。
c:替换,将选定行替换为指定内容。
d:删除,删除选定的行。
i:插入,在选定行上面插入一行指定内容。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以
ASCII 码输出。其通常与“-n”选项一起使用。
s:替换,替换指定字符。
y:字符转换。

三、如何使用sed

sed -n 'p' 1.txt                #输出所有内容,等同于 cat 1.txt
sed -n '3p' 1.txt	            #输出第 3 行
sed -n '3,5p' 1.txt	            #输出 3~5 行
sed -n '1~2p' 1.txt	            #输出所有奇数行
sed -n '2~2p' 1.txt             #输出所有偶数行
sed -n '1p;3p;5p' 1.txt         #输出1,3,5行
sed -n '2,+3p' 1.txt            #从第2行开始,连续3行进行输出,即输出2~5行

sed -n ‘p’ 1.txt
在这里插入图片描述

sed -n ‘3p’ 1.txt
在这里插入图片描述

sed -n ‘3,5p’ 1.txt
在这里插入图片描述

sed -n ‘1~2p’ 1.txt
在这里插入图片描述

sed -n ‘2~2p’ 1.txt
在这里插入图片描述

sed -n ‘1p;3p;5p’ 1.txt
在这里插入图片描述

sed -n ‘2,+3p’ 1.txt
在这里插入图片描述

1.Sed结合正则表达式输出指定行

格式:
sed -n '/root/p' /etc/passwd 
/root/
**第一个/表示正则开始,第二个/表示正则结束,p是打印改动部分**

代码如下(示例):

sed -n '$p' /etc/passwd                  #输出最后一行
sed -n '/root/p' /etc/passwd             #输出包含root的行
sed -n '/bash$/p' /etc/passwd            #输出以bash结尾的行
sed -n '/s...x/p' /etc/passwd        #输出包含s开头中间经过3个任意数并以x结尾的单词的行
sed -n '/[0-9]/p' /etc/passwd            #输出包含数字的行
sed -n '/^root/p' /etc/passwd            #输出开头为root的行
sed -n '1!p' /etc/passwd                 #第一行不输出,其他全部输出
sed -n '/nologin/!p' /etc/passwd         #输出不包含nologin结尾的行
sed -n '/root/=' /etc/passwd             #显示包含root的行号
sed -n '/root/=;/root/p' /etc/passwd #以分号隔开两个正则,分别显示包含root的内容和对应行号
sed -n '$=' 1.txt                        #显示总共多少行sed默认不支持扩展正则,如果要支持,需要加-r选项
sed -nr '/^root|^shutdown/p' /etc/passwd #显示以root开头或者shutdown开头的行

sed -n ‘$p’ /etc/passwd在这里插入图片描述

sed -n ‘/root/p’ /etc/passwd
在这里插入图片描述

sed -n ‘/bash$/p’ /etc/passwd
在这里插入图片描述

sed -n ‘/s…x/p’ /etc/passwd
在这里插入图片描述
sed -n ‘/[0-9]/p’ /etc/passwd
在这里插入图片描述

sed -n ‘/^root/p’ /etc/passwd
在这里插入图片描述

sed -n ‘1!p’ /etc/passwd
在这里插入图片描述

sed -n ‘/nologin/!p’ /etc/passwd
在这里插入图片描述

sed -n ‘/root/=’ /etc/passwd
在这里插入图片描述

sed -n ‘/root/=;/root/p’ /etc/passwd
在这里插入图片描述

sed -n ‘$=’ 1.txt
在这里插入图片描述

sed -nr '/^root|^shutdown/p' /etc/passwd

在这里插入图片描述

2.增加内容

格式:
sed '2ihello world' /etc/passwd 
sed '2i\hello world' /etc/passwd #可以在i后面加\,方便阅读
i是在上方插入,a在后方插入
sed '2ihello world' /etc/passwd                     #在第二行之前插入hello world
sed '3i\hello\nworld' /etc/passwd                   #在第三行之前带换行的hello world
sed '1ahello world' /etc/passwd                     #在第一行之后插入hello world
sed '$ahello world' /etc/passwd                     #在最后一行之后插入
sed '2,4a hello world' /etc/passwd                  #在2到4行插入
sed '/we/a hello world' /etc/passwd                 #在包含we这行插入
sed '/we/a hello world;3p;3i shell' /etc/passwd     #在/a后面的部分不会被转义

sed ‘2ihello world’ /etc/passwd
在这里插入图片描述

sed ‘3i\hello\nworld’ /etc/passwd
在这里插入图片描述

sed ‘1ahello world’ /etc/passwd
在这里插入图片描述

sed ‘$ahello world’ /etc/passwd
在这里插入图片描述

sed ‘2,4a hello world’ /etc/passwd
在这里插入图片描述

sed ‘/we/a hello world’ /etc/passwd
在这里插入图片描述

sed ‘/we/a hello world;3p;3i shell’ /etc/passwd
在这里插入图片描述

3.删除

格式:
sed '1d' /etc/passwd 
d为删除选定的行
sed 'd' /etc/passwd                    #删除每一行
sed '1d' /etc/passwd                   #删除第一行(少了root这一行)
sed '1,4d' /etc/passwd                 #删除1到4行
sed '/nologin/d' /etc/passwd           #删除包含nologin的行echo '' >> /etc/passwd                 #添加特殊符号空格
echo '###' >> /etc/passwd              #添加特殊符号#sed '/^$/d' /etc/passwd                #删除空行
sed '/^#/d' /etc/passwd                #删除特殊符号#
sed '/^#/d;/^$/d' /etc/passwd          #删除空行和特殊符号

sed ‘d’ /etc/passwd
在这里插入图片描述

sed ‘1d’ /etc/passwd
在这里插入图片描述

sed ‘1,4d’ /etc/passwd
在这里插入图片描述

sed ‘/nologin/d’ /etc/passwd
在这里插入图片描述

sed ‘/^$/d’ /etc/passwd
在这里插入图片描述

sed ‘/^#/d’ /etc/passwd
在这里插入图片描述

sed '/^#/d;/^$/d' /etc/passwd

在这里插入图片描述

4.替换

sed '/^root/ckgc' /etc/passwd
sed '/^root/c\kgc' /etc/passwd
c为替换整行内容,可以加\方便阅读
sed '/^root/ckgc' /etc/passwd      #把以root开头的这行替换为kgc
sed '/root/ckgc' /etc/passwd       #把包含root的行替换为kgc
sed 'ckgc' /etc/passwd             #全文替换sed -i.bak 'p' /etc/hosts         
#修改原文件的同时生成一个备份文件(这里没有修改,只做了备份)

sed ‘/^root/ckgc’ /etc/passwd
在这里插入图片描述

sed ‘/root/ckgc’ /etc/passwd
在这里插入图片描述

sed ‘ckgc’ /etc/passwd
在这里插入图片描述

5.搜索替换

s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###替换修饰符:
sed 's/root/ROOT/igp; w /root/1.txt' /tmp/passwd
s为只替换符合要求的字符
g 行内全局替换
p 只显示替换成功的行
I,i 忽略大小写
w /PATH/FILE 将替换成功的行保存至文件中
sed 's/root/ROOT/' /etc/passwd                  #搜索每行第一个root替换为ROOT
sed -n 's/root/ROOT/gp' /etc/passwd             #搜索全局的root替换为ROOT
sed -n 's/o/O/2p' /etc/passwd                   #搜索字母o,仅替换每行第二个o为大写O
sed -n 's/root//gp' /etc/passwd                 #搜索每行第一个root替换为空
sed -n '1,5s/^/#/gp' /etc/passwd                #将1到5行的开头添加#
sed -n 's/\/sbin\/nologin/kgc/gp' /etc/passwd   #转义符\,把/sbin/nologin替换为kgc
sed -n 's@/sbin/nologin@kgc@gp' /etc/passwd     #可以用其他符号@当做转义符,方便阅读sed -n 's/^sync/#&/gp' /etc/passwd              
# &符号代表当前行中匹配到的完整模式字符串,相当于把sync替换为#syncsed -n 's/network/ooooo/igp' /etc/passwd        
#不区分大小写的搜索network并替换为ooooo

sed ‘s/root/ROOT/’ /etc/passwd
在这里插入图片描述

sed -n ‘s/root/ROOT/gp’ /etc/passwd
在这里插入图片描述

sed -n ‘s/o/O/2p’ /etc/passwd
在这里插入图片描述

sed -n ‘s/root//gp’ /etc/passwd
在这里插入图片描述

sed -n ‘1,5s/^/#/gp’ /etc/passwd
在这里插入图片描述

sed -n ‘s//sbin/nologin/kgc/gp’ /etc/passwd
在这里插入图片描述

sed -n ‘s/^sync/#&/gp’ /etc/passwd(&符号区别)
在这里插入图片描述

sed -n ‘s/network/ooooo/igp’ /etc/passwd
在这里插入图片描述

6.插入文件

sed '3r /etc/hosts' /etc/passwd    #在第三行添加/etc/hosts文件内容
sed '/2/r /etc/hosts' /etc/passwd  #搜索包含2的行,在符合条件的行后添加/etc/hosts文件内容
sed '$r /etc/hosts' /etc/passwd    #在/etc/passwd末尾添加/etc/hosts文件内容
r代表读取/etc/hosts文件的内容

sed ‘3r /etc/hosts’ /etc/passwd
在这里插入图片描述

sed ‘/2/r /etc/hosts’ /etc/passwd
在这里插入图片描述

sed ‘$r /etc/hosts’ /etc/passwd
在这里插入图片描述

7.另存为到文件

sed 'w /tmp/hosts' /etc/hosts     #将 /etc/hosts 文件中的内容复制到 /tmp/hosts文件中
sed '1w /tmp/hosts' /etc/hosts    #将 /etc/hosts 文件中的第一行写入到 /tmp/hosts 文件请注意,如果目标文件 /tmp/hosts 已经存在,这些命令会覆盖原有内容。
如果你想将 /etc/hosts 文件的内容追加到 /tmp/hosts 文件末尾,
可以使用 >> 符号来实现,如sed 'w /tmp/hosts' /etc/hosts >> /tmp/hosts。

sed ‘w /tmp/hosts’ /etc/hosts
在这里插入图片描述

sed ‘1w /tmp/hosts’ /etc/hosts
在这里插入图片描述

8.同时编辑

sed -n -e '1p' -e '3p' /etc/passwd     #打印第一行和第三行
sed -ne '1p' -ne '5p' /etc/passwd      #打印第一行和第五行
-e 选项用于指定一个编辑命令,它允许你在同一个 sed 命令中执行多个编辑操作

sed -n -e ‘1p’ -e ‘3p’ /etc/passwd
在这里插入图片描述

sed -ne ‘1p’ -ne ‘5p’ /etc/passwd
在这里插入图片描述

9.分组操作

sed '/root/{s/root/ROOT/;s/x/X/g}' /etc/passwd        
#搜索包含root的行并替换为ROOT且将行中所有的x替换为Xsed -ne '/root/{s/root/ROOT/;s/x/X/g}' -ne '1,10p'/etc/passwd   
#只打印一到十行,匹配逻辑和上个命令相同echo 123abcxyz |sed -r 's/(123)(abc)(xyz)/\1/'      
#输出字符串123abcxyz到sed中,-r告诉 sed 使用扩展的正则表达式语法,s为替换命令,
\1是反向引用第一个捕获组匹配到的内容,即123
替换命令将整个匹配的字符串 "123abcxyz" 替换为第一个捕获组匹配到的内容 "123"。ifconfig ens33|sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'
#从ifconfig ens33中选择第二行进行替换操作,匹配.*inet(.表示任意字符,
*表示任意个数),[0-9.]+表示捕获任意[0-9.]的数,
*表示任意个数,\1反向引用,p打印

sed ‘/root/{s/root/ROOT/;s/x/X/g}’ /etc/passwd
在这里插入图片描述

sed -ne ‘/root/{s/root/ROOT/;s/x/X/g}’ -ne ‘1,10p’/etc/passwd
在这里插入图片描述

echo 123abcxyz |sed -r ‘s/(123)(abc)(xyz)/\1/’
在这里插入图片描述

ifconfig ens33|sed -rn ‘2s/.inet ([0-9.]+) ./\1/p’
在这里插入图片描述

10.读取完退出

sed '3q' /etc/passwd         #3q表示处理到第三行时结束
注意:q不要和-i一起使用,以免覆盖源文件

sed ‘3q’ /etc/passwd
在这里插入图片描述

11.sed脚本

H:复制到剪贴板(存储数据到缓存区);
g、G:将剪贴板中的数据覆盖/追加至指定行;
w:保存为文件;
r:读取指定文件;
a:追加指定内容。具体操作方法如下所示。
I,i 忽略大小写
sed '/the/{H;d};$G' 1.txt   
#搜索包含the的行,H用于存储数据,";"用于隔开多个命令,d用于删除匹配的行,$匹配最后一行,
G将缓存里的数据输入到匹配行后sed '1,5{H;d};13G' 1.txt

sed ‘/the/{H;d};$G’ 1.txt
在这里插入图片描述

sed ‘1,5{H;d};13G’ 1.txt
在这里插入图片描述

#!/bin/sed -f                 
s/root/ROOT/g                   #将全局root替换为ROOT
s/^#//g                         #全局删除所有以#开头的行
s/\/sbin\/nologin/kgc/g         #全局替换/sbin/nologin为kgc
#!/bin/sed -f               
1c hello world                  #将第一行替换为hello world2{                              #选择第二行把第一个b替换成B并打印s/b/B/p
}/root/{                         #选择包含root的行,把第一个x替换成H,第一个root替换成ROOTs/x/H/;s/root/ROOT/
}注意:
sed脚本文件第一行要声明#!/bin/sed -f
不要加单引号
每行的最后不能有空格等多余字符
#号开头为注释
一行有多个命令时用分号隔开
注意:sed的返回值一般情况为0,不管是不是修改成功了,除非是语法错误
所以sed的返回值$?一般不作为sed成功的判断条件

在这里插入图片描述

在这里插入图片描述

12.sed的高级应用

sed -r 's/^( +|:)/#/' /etc/hosts     #-r匹配正则,将以空格或者:开头的行替换成以#开头word=1111 #定义一个变量 
sed "1a$word" /etc/hosts             #双引号为引用,单引号不引用
sed "\$a$word" /etc/hosts            #在文本末尾插入,根据需要使用转义符\

sed -r ‘s/^( +|:)/#/’ /etc/hosts
在这里插入图片描述
sed ‘1a$word’ /etc/hosts
在这里插入图片描述

sed "\$a$word" /etc/hosts

在这里插入图片描述

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

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

相关文章

[C语言]自己实现sprintf,printf函数

一、要点: 实现sprintf,printf的要点在于不定参数的接收与处理,即va_list的使用,另外使用va_list需要包含stdarg.h头函数,想了解详细用法可以自行查找。 另外就是涉及数据的处理与转换,常用的是整型转字符…

Redis的集群的搭建

1、为什么要搭建Redis集群 Redis 集群能够提供高可用性、高性能、扩展性和数据安全性,适用于各种需要高速缓存和数据存储的复杂应用场景 2、Redis的集群模式 主从模式哨兵模式区中心化模式 3、主从模式 redis主从模式表示一个主节点跟若干个从节点。主节点可以…

矿井水絮凝沉淀一体机处理效果高

诸城市鑫淼环保小编带大家了解一下矿井水絮凝沉淀一体机处理效果高 矿井废水的成分主要是悬浮物和可溶性无机物,还含少量的废机油、乳化油、废坑木腐烂物、井下粪便等有机污染物。 悬浮物SS的特点:含量变化范围很大,可以从几百到几千甚至上万…

VMware 上安装 CentOS 7 教程 (包含网络设置)

**建议先看一些我安装VMware的教程,有些网络配置需要做一下 1.打开VMware,创建虚拟机 2.勾选自定义,点击下一步 3.点击下一步 4.勾选“稍后安装操作系统”,点击下一步 5.勾选linux,勾选centos7,点击下一步…

AH1405芯片的应用领域有哪些?sot23-5封装ic

1405芯片是一种SOT23-5封装的降压转换器,以其出色的性能和广泛的应用领域,成为电子设计中的热门选择。本文将详细介绍1405芯片的技术特点以及其在不同领域的应用情况。 技术特点 1. 宽输入电压范围 1405芯片能够接受从6V至40V的输入电压,这…

汽车绝缘检测详细设计

粘连检测原理 粘连检测: 目的:检测继电器、开关或电气触点是否因故障而保持在接通或断开的状态。工作原理: 正常操作:继电器或开关在正常操作时会周期性地开闭。开闭过程中会有明显的电流和电压变化。粘连状态:如果继…

Vuex数据持久化实现

版本:vue 3.4.29 vuex4.1.0 1. 出现的问题 当我使用 vuex 作为状态管理组件来存储用户的一些信息之后,发现从/login 页面跳转到/home 界面后拿不到vuex信息。 之后查阅资料了解,当切换路由后,vue 会重新渲染,而vuex 也…

实战机器学习--决策树分类器在蘑菇分类中的应用

数据集:https://pan.quark.cn/s/4d3526600c0c 在机器学习领域,图像分类是一个常见的任务,尤其是在自然语言处理和生物识别等领域。本文将通过一个简单的例子,展示如何使用Python和一些流行的库来实现蘑菇的分类,区分可…

docker 部署 LaTeX 环境

docker 部署 LaTeX 环境 需求表述部署步骤环境补丁(解决 picins.sty 缺失问题) 同步发布在个人笔记docker 部署 LaTeX 环境 需求表述 想做一个项目,需要一个 LaTeX 的中文环境,由于习惯了在服务器上用 docker 部署环境&#xff0…

pgsql的update语句在set里进行字段的运算 SET sort = sort +1

一、场景 需求:version 版本字段是记录数据更新的次数,新增时自动填充 version1 ,每更新一次数据 version就自增1。项目里单表插入和更新要手写update语句进行插入和更新。 –表中int4类型的字段 version 是1时,由1变成2 – version 是null…

【Linux】信号(signal)

目录 一、信号概念: 二、信号的常见状态: 信号递达: 信号未决: 阻塞信号: 忽略信号: 信号在内核中的表示: 三、信号相关函数: sigset_t (类型)&…

二、QGroundControl开发环境搭建

文章目录 环境列表QGC源码下载编译 环境列表 QGC GithubPX4-AutopilotQt 5.15Ubuntu20.04 QGC源码下载编译 官网下载指令 如下 // Clone the repo (or your fork) including submodules: git clone --recursive -j8 https://github.com/mavlink/qgroundcontrol.git // Upda…

Axure中继器实战篇:让数据展示和交互设计更上一层楼!

Axure中继器实战篇:让数据展示和交互设计更上一层楼! 前言 经过了前两章的学习,接下来我们去模拟的实际场景开启实战篇,以下是界面 1.前期准备 前期把页面准备好后,给中继器的每个单元格命名为了方便数据绑定的操作。 为了演示我准备了几十行数据,建议也多准备一点。…

后端返回一个图片链接,前端如何实现下载功能?

纯原创文章,转载请说明来源。 一、背景 要实现一个下载功能,后端直接返回了一个图片的地址https://xxxxx/pic.jpg。如果我们直接通过window.open(url, _blank) 的方式去下载这个图片,会发现 Chrome 浏览器会对这个图片进行预览,…

魅族手机怎么录屏?详细步骤助你轻松上手

“有人知道魅族手机怎么录屏吗,最近我在准备一些教学视频,急需用到手机的录屏功能来记录操作过程,但遗憾的是,我翻遍了设置也没能找到录屏的开关。所以,我在这里想问问大家,魅族手机是如何启动录屏功能的&a…

【PyTorch】图像多分类项目部署

【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 如果需要在独立于训练脚本的新脚本中部署模型,这种情况模型和权重在内存中不存在,因此需要构造一个模型类的对象,然后将存储的权重加载到模型中。 加载模型参数,验证模型…

Sftp和ftp 区别、工作原理

Sftp的工作原理: SFTP的工作原理基于SSH协议,通过加密连接和安全认证来保障文件传输的安全性。 SFTP(SSH File Transfer Protocol)是一个确保数据在传输过程中安全的协议,它通过为传输的数据提供加密保护和对用户…

Docker重启策略和缩小镜像体积

目录 Docker重启策略 命令格式 命令选项 Docker缩小镜像体积 Docker重启策略 命令格式 docker run --restartno|always|on-failure|unless-stopped .... 命令选项 no:不管容器是正常退出还是异常退出,都不会重启容器。默认策略。always&#xf…

Java面试锦集 之 一、Java基础(1)

一、Java基础(1) 1.final 关键字的作用? 修饰变量: 一旦被赋值,就不能再被修改,保证了变量值的稳定性。 例: final int NUMBER 10; //之后就不能再改变 NUMBER 的值了。修饰方法:…

图解 HDFS 架构 |读写过程

HDFS HDFS 全称 Hadoop Distributed File System,是一个分布式文件系统。HDFS(Hadoop Distributed File System)是 Apache Hadoop 生态系统的一部分,它是一个分布式文件系统,用于存储和处理大规模数据集。HDFS 专门设…