【sed编辑器】

news2024/10/6 6:42:47

目录

  • 一、sed编辑器
  • 二、sed的命令格式
    • 操作命令
    • 1.1、命令演示
  • 二、替换
  • 三、插入


一、sed编辑器

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

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

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

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

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

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

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完

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

二、sed的命令格式

常用选项

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

常用操作

s:替换,替换指定字符。

d:删除,删除选定的行。

a:增加,在当前行下面增加一行指定内容。

i:插入,在选定行上面插入一行指定内容。

c:替换,将选定行替换为指定内容。

y:字符转换,转换前后的字符长度必须相同。

p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。

=:打印行号。

l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

操作命令

sed -e '操作' 文件1 文件2 
sed -n -e '操作' 文件1 文件2 
sed -f 脚本文件 文件1 文件2 
sed -i -e '操作' 文件1 文件2 

1.1、命令演示

1、打印文件里面的所有行内容

[root@dz666 ~]# sed -n 'p'test
one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve

2、打印文件里3到9行的内容

[root@dz666 ~]# sed -n '3,9p' test
three
four
five
six
seven
eight
nine
[root@dz666 ~]#  sed -n '1,+4p' test
#1,+4p 意思是打印第一行和第一行之后连续的4行内容
one
two
three
four
five
[root@dz666 ~]#  sed '5q' test
# 5q 意思是读取到第5行时退出该命令,只能从开头开始
one
two
three
four
five

3、使用=命令来查看这个文件的最后一行的行号

[root@dz666 ~]# cat test | sed -n '=' |tail -1
12
[root@dz666 ~]# cat test | wc -l
12     #使用wc -l 来查看最后一行的行号

4、使用l命令可以查看隐藏字符

[root@dz666 ~]# cat test | sed -n 'l'
one$
two$
three$
four$
five$
six$
seven$
eight$
nine$
ten$
eleven$
twelve$

5、使用-e可以执行多条命令

#sed命令会逐行读取内容,
#先使用第一条命令显示文件内容再去使用第二条命令
[root@dz666 ~]# cat test | sed -n -e '=' -e 'p'
#使用 -e 可以同时执行多个命令
#也可以使用
cat test | sed -n '=;p' 
#效果跟上条命令一样
1
one
2
two
3
three
4
four
5
five
6
six
7
seven
8
eight
9
nine
10
ten
11
eleven
12
twelve

6、指定行号来打印指定行号的内容

[root@dz666 ~]# cat test | sed -n '$p'
# ’$p‘只显示最后一行内容
twelve
[root@dz666 ~]# cat test | sed -n '4p'
four
#显示第4行内容
[root@dz666 ~]# cat test | sed -n '9p'
nine
[root@dz666 ~]# cat test | sed -n '1p'
one

7、使用sed来显示奇数行和偶数行

[root@dz666 ~]#  sed -n 'n;p' test
#在里面使用n命令不输出当前内容,执行到下一行内容
#偶数行
two
four
six
eight
ten
twelve

[root@dz666 ~]#  sed -n 'p;n' test
#奇数行
one
three
five
seven
nine
eleven

8、打印指定文件里的字符串

[root@dz666 ~]# sed -n '/root/p' /etc/passwd
#打印所有//里面字符串在文件里的内容
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@dz666 ~]# sed -n '/^root/p' /etc/passwd
#加上^root 意思是以root为开头的行内容
root:x:0:0:root:/root:/bin/bash


[root@dz666 ~]# sed -n '/nologin$/p' /etc/passwd
#加上 nologin$ 意思是以nologin结尾的行内容
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin


[root@dz666 ~]# sed -n -r '/root|ftp/p' /etc/passwd
#使用正则表达式时要加上 -r
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

9、使用d命令来删除行内容

sed '行号 d'     #删除指定行号的行

sed '行1 行2 d'  #删除行1与行2区间的行

sed '/字符串/ d' #删除包含字符串的行

sed '/正则表达式/ p' #删除所有包含正则能够匹配的到内容的行

sed '行号,/字符串/ d'  #删除从指定行到第一个包含字符串的行

sed '/字符串1/,/字符串2/ d' 
#从第一个包含字符串1的行开始删除到第一个包含字符串2的行
#之后的行会重复之前的规则操作

二、替换

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

1、4种替换标记

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

字号4

[root@dz666 ~]# sed  -n  's/root/admin/p' /etc/passwd
#直接写p意思是找到第一个root后替换为admin
admin:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin

[root@dz666 ~]# sed  -n  's/root/admin/2p' /etc/passwd
#2p 意思是替换第二个的root为admin
root:x:0:0:admin:/root:/bin/bash

[root@dz666 ~]# sed  -n  's/root/admin/gp' /etc/passwd
#gp 意思是替换所有root为admin
admin:x:0:0:admin:/admin:/bin/bash
operator:x:11:0:operator:/admin:/sbin/nologin

[root@dz666 ~]# sed  -n  's/root//gp' /etc/passwd
#在//里不写入字符,直接删除所有root字符
:x:0:0::/:/bin/bash
operator:x:11:0:operator:/:/sbin/nologin

[root@dz666 ~]# sed  -n  's/^#//gp' test、
#注释所有#号

[root@dz666 ~]# sed  -i -n  's/^#//gp' test
#建议先测试好之后在使用 -i 命令
#修改配置文件前要先备份
#加入-i 可以修改原文件

1、在开头插入#号

在这里插入图片描述

2、删除奇数行的#
在这里插入图片描述

3、使用s来替换

[root@dz666 ~]# sed -n  '/swap/ s/^/#/gp' /etc/fstab
#注释掉文件里有swap的行内容 
#UUID=31b870c6-db09-424d-bfdd-20d7bbb54337 swap                    swap    defaults        0 0

[root@dz666 ~]# sed -n  '/^UUID/ s/^/#/gp' /etc/fstab 
#注释掉所有以UUID开头的行内容
#UUID=5429c72d-e20c-4b24-bddc-2446d40ec8ba /                       xfs     defaults        0 0
#UUID=0bc8a633-df1e-404d-a44c-2cdd57be56cb /boot                   xfs     defaults        0 0
#UUID=31b870c6-db09-424d-bfdd-20d7bbb54337 swap                    swap    defaults        0 0

字号4

[root@dz666 ~]# sed  's/.*swap.*/#&/' /etc/fstab 
# &这个命令表示匹配前面执行命令的整行内容

# /etc/fstab
# Created by anaconda on Wed Mar 22 19:07:19 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=5429c72d-e20c-4b24-bddc-2446d40ec8ba /                       xfs     defaults        0 0
UUID=0bc8a633-df1e-404d-a44c-2cdd57be56cb /boot                   xfs     defaults        0 0
#UUID=31b870c6-db09-424d-bfdd-20d7bbb54337 swap                    swap    defaults        0 0

4、使用-f 加上脚本来执行命令

[root@dz666 ~]# vim dz  #写入脚本文件

#把以root开头的行注释

/^root/ s/^/#/

#把ftp替换成mysed

s/ftp/mysed/g

#把以nologin为结尾的行删除

/nologin$/ d
[root@dz666 ~]# sed -f dz /etc/passwd
#执行的脚本文件里的命令
#root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
dikl:x:1000:1000:DikL:/home/dikl:/bin/bash

5、在s替换后面加的字符可以是任何字符

sed -n 's/\/bin\/bash/\/bin\/csh/p' /etc/passwd

sed -n 's!/bin/bash!/bin/csh!p' /etc/passwd		#使用“!”作为字符串分隔符

sed -i 's9\945\9\99\98\939g' test.txt		#将94599替换为9893

三、插入

1、c命令插入
在这里插入图片描述

2、使所有的1字符转换成A,所有的4字符转换成B,所有的5字符转换成C
在这里插入图片描述

3、使用a在指定的行下面插入内容
在这里插入图片描述

4、使用i在指定的行上面插入内容
在这里插入图片描述

5、使用r在指定的行下面读取文件内容
在这里插入图片描述

6、将1到3行的内容剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后
在这里插入图片描述
也可以复制多行内容
在这里插入图片描述

7、替换字符位置

[root@dz666 ~]# echo "111222333" | sed -r 's/(111)(222)/\2\1/'
#将字符 111222 互换位置
222111333

[root@dz666 ~]# echo "111222333" | sed -r 's/^(.)(.*)(.)$/\3\2\1/'
311222331
#将第一个字符和最后一个字符互换

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

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

相关文章

OSC Liblo Window10配置

OpenSoundControl一种网络通讯协议,想了解详情的自行打开网站。 liblo 是最知名的OSC库, 功能完整,用 C 和 LGPL 许可编写。 下载请前往GitHub库。 解压后安装过程如下,需要用到CMake: 1.选择源代码文件和构建工程的文…

一文读懂“生成式 AI”

一、前言 本文基于谷歌的:《Introduction to Generative AI》 并且借助 ChatGPT 整理而成,帮助大家理解生成式 AI 这个概念。 主要包括 4 个部分: 生成式 AI 的定义生成式 AI 的工作原理生成式 AI 模型的分类生成式 AI 的应用 二、生成式…

【数据结构】双向带头循环链表的实现

目录 全部代码 图例(双向带头循环链表) 各个功能的实现 创建该链表的节点 创建初始链表 链表的头插 链表的尾插 链表的随机插入 链表的头删 链表的尾删 链表的随机删除 链表的销毁 链表是否为空的判断 链表节点的创建 总结 全部代码 typ…

命令行更新Windows

命令行更新Windows powershell命令行更新安装 Windows Update module for Windows Powershell连接到 Windows Update 服务器并下载更新安装下载好的 Windows Update 更新 cmd执行Windows update更新检查更新下载 Windows Update 更新安装更新安装更新后重新启动设备 win10以下版…

Python中Pandas库的相关操作

目录 Pandas库 常用操作 创建DataFrame 查看数据 数据选择和过滤 数据排序和排名 缺失数据处理 数据聚合和分组 数据的合并和连接 Pandas库 Pandas是Python中常用的数据处理和分析库,它提供了高效、灵活且易于使用的数据结构和数据分析工具。 1.Series&a…

实例35---字符串反转,如将字符串 “www.runoob.com“ 反转为 “moc.boonur.www“。

文章目录 前言一、题目描述 二、题目分析 三、解题 1.解题方法一--- for循环来将字符的下标数值进行对每一个字符进行交换 ---程序运行代码 2.解题方法二------ 指针 ------ 程序运行代码(1)程序运行代码优化 总结 前言 本系列为C语言菜鸟100道基础经典例题详解刷题系列。点滴…

微服务:服务发现

1. 服务发现 eureka、nacos、Consul、etcd 和 zk 都是主流的服务发现工具,而 Dubbo 和 Polaris Mesh 则是基于服务发现的 RPC 框架。 它们的主要区别在于: eureka 是 Netflix 开源的一个服务发现组件,支持高可用和数据同步,具有…

如何使用Linkage Mapper揭示栖息地变化的故事

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Linkage Mapper解密数字世界链接 文章目录 引言1.1 定义和作用1.2 Linkage Mapper的历史和发展2.1 揭示栖息地变化的重要性2.2 Linkage Mapper的优势和不足

Windows下载安装RocketMq

Windows下载安装RocketMq 下载安装包启动NAMESERVER 和 BROKER启动NAMESERVER启动BROKER 安装可视化插件 下载安装包 RockitMQ官网下载地址:https://rocketmq.apache.org/release-notes/ 解压到指定的文件夹下 先配置JAVA_HOME 配置ROCKETMQ_HOME环境变量 …

使用Maple的Python API :OpenMaple(Windows下的解决方案)

在Maple 2023(按照软件文档,Maple 2018及以上版本均适用;我目前测试的版本为2023)的安装目录下,有软件附带的解释器,如D:\Program Files\Maple 2023\Python.X86_64_WINDOWS\Python.exe。这一Python解释器的…

Python中NumPy库的相关操作

目录 NumPy库 常用操作 创建数组 数组属性 索引和切片 数组运算 数组重塑 NumPy库 NumPy(Numerical Python)是Python中常用的数值计算库,它提供了高性能的多维数组对象和对数组进行操作的函数。 1.多维数组对象(ndarray&…

Java 课程设计 —— 扫雷

一、团队课程设计博客链接: https://www.cnblogs.com/luomeili/p/10280310.html 二、个人负责模块或任务说明: 模块:文件操作 Minefield 类实现 三、自己的代码提交记录截图 四、自己负责模块或任务详细说明 1.Minefield 类实现 Minefie…

Java中的CountDownLatch和CyclicBarrier有什么作用?

在Java并发编程中,CountDownLatch和CyclicBarrier是两个非常有用的工具,它们可以帮助我们更加方便地进行线程通信和协作。在本文中,我将从面试的角度,详细讲解Java中的CountDownLatch和CyclicBarrier的概念、作用和实现方式&#…

基于卷积的图像分类识别(六):DenseNet FractalNet

系列文章目录 本专栏介绍基于深度学习进行图像识别的经典和前沿模型,将持续更新,包括不仅限于:AlexNet, ZFNet,VGG,GoogLeNet,ResNet,DenseNet,SENet,MobileN…

如何搭建自己的git服务器

GitHub,Gitee 想来大家都用过,我们的代码就是托管在这些平台上的。因此,你可能好奇为什么我们不自己搭建一个 git 呢服务器?下面,就开始教大家如何一步步搭建自己的 git 服务器(试验成功的那一刻还是很让人…

Java 中 ArrayList 和 LinkedList 有什么区别

在Java中,ArrayList和LinkedList是两种常见的集合类。它们都实现了List接口,提供了类似数组的功能,可以存储任意类型的对象。虽然它们都可以实现相同的功能,但是它们的底层实现方式有所不同,因此在性能和用途上也存在一…

dom4j解析XML文件

主要为了讲解Mybatis中如何用dom4j解析XML,这里当作dom4j解析.XML文件的练习 引入mybatis配置文件和一个.xml文件 都是.xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN…

【C++】| 04——STL | 容器_vector

系列文章目录 【C】| 01——泛型编程 | 模板 【C】| 02——STL | 初识 【C】| 03——STL | 迭代器 【C】| 04——STL | 容器_vector 文章目录 1. vector容器2. vector库2.1 迭代器相关函数2.1 ww 1. vector容器 vector 与 动态数组 相似&#xff0c;可以自动调节自身大小。元素…

基于SpringBoot的美容院管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录 一、项目简介 二、系…

Windows10中英文切换按钮消失?一招解决

目录 问题场景&#xff1a; 问题描述 原因分析&#xff1a; 解决方案&#xff1a; 1. 打开设置&#xff0c;选择时间和语言 2. 进入日期时间设置 3. 进入高级键盘设置 4. 勾选这个勾选框&#xff0c;问题解决 问题场景&#xff1a; 博主玩道德与法治V在线模式时&#…