sed语句用法

sed编辑器

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

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。 sed的工作流程主要包括读取、执行和显示三个过程:

  • 读取: sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)
  • 执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行
  • 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

模式空间和保持空间

模式空间:sed处理文本内容行的一个临时缓冲区,模式空间中的内容会主动打印到标准输出,并自动清空模式空间

保持空间:sed处理文本内容行的另一个临时缓冲区,不同的是保持空间内容不会主动清空,也不会主动打印到标准输出,而是需要sed命令来进行处理

模式空间与保持空间的关系

模式空间:相当于流水线,文本行再模式空间中进行处理;
保持空间:相当于仓库,在模式空间对数据进行处理时,可以把数据临时存储到保持空间;作为模式空间的一个辅助临时缓冲区,但又是相互独立,可以进行交互,命令可以寻址模式空间但是不能寻址保持空间。可以使用高级命令h,H,g,G与模式空间进行交互。

sed命令参数

-n 使用安静模式.则只有经过sed特殊处理的哪一行才会被列出来
-e 传送带(前面执行完传递给后面)
-f 跟随脚本文件名
-r 脱意
-i 直接修改读取文件

sed命令详解

g:表示行内全面替换
w:表示把行写入一个文件
x:表示互换模式空间的文本和保持空间的文本
y:表示把一个字符翻译为另外的字符(不用于正则表达式)

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

d :删除,因为是删除,所以 d 后面通常不接任何东东;

i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

s :取代,通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g

n:读取下一个输入行, 用下一个命令处理新的行

y:把一个或多个字符替换成另一个字符

#初始
root@localhost ~]# cat test
a b c
b
c
d

//a的用法
#选择行下添加
[root@localhost ~]# sed '2a123321' test
a b c
b
123321
c
d
#在匹配的参数下一行进行添加
[root@localhost ~]# sed '/c/a123321' test
a b c
123321
b
c
123321
d

//c的用法
[root@localhost ~]# cat test
a b c
b
c
d
#选择行进行修改
[root@localhost ~]# sed '3caaa' test
a b c
b
aaa
d
#将匹配到的参数进行修改
[root@localhost ~]# cat test
a b c
b
c
d
[root@localhost ~]# sed '/d/caaa' test
a b c
b
c
aaa

//d的用法
[root@localhost ~]# cat test
a b c
b
c
d
#将第一行删除
[root@localhost ~]# sed '1d' test
b
c
d
#将匹配到的行删除
[root@localhost ~]# cat test
a b c
b
c
d
[root@localhost ~]# sed '/b/d' test
c
d

//i的用法
#选择行进行插入
[root@localhost ~]# cat test
a b c
b
c
d
[root@localhost ~]# sed '3i123' test
a b c
b
123
c
d
#在匹配的参数前一行进行插入、
[root@localhost ~]# cat test
a b c
b
c
d
[root@localhost ~]# sed '/b/i123' test
123
a b c
123
b
c
d

//p的用法
[root@localhost ~]# cat test
a b c
b
c
d
[root@localhost ~]# sed -n '/a/p' test      //-n选项:只显示匹配处理的行(否则会输出所有)(也就是关闭默认的输出)
a b c

//s的用法
#将匹配的每行里的第一个参数进行替换
[root@localhost ~]# cat test
a b c
b
c
d
[root@localhost ~]# sed 's/b/c/' test
a c c
c
c
d
#如果一行类出现多次参数,就会出现以下问题
[root@localhost ~]# cat test
a b c
b
c
d
aa
ac
[root@localhost ~]# sed 's/a/c/' test
c b c
b
c
d
ca
cc
#想要全部替换需要在最后加上g
[root@localhost ~]# cat test
a b c
b
c
d
aa
ac
[root@localhost ~]# sed 's/a/c/g' test
c b c
b
c
d
cc
cc

//n的用法,n读取下一个输入行
#此处的n不是sed -n的n的那种用法
[root@localhost ~]# cat test
a b c
b
c
d
aa
ac
[root@localhost ~]# sed -n '/a/n;p' test        //匹配到的参数下面的所有行
b
c
d
ac

//y的用法
#将匹配到的整行都进行修改
[root@localhost ~]# cat test
a b c
b
c
d
aa
ac
[root@localhost ~]# sed '5y/a/C/' test
a b c
b
c
d
CC
ac

N:读取匹配到的行的下一行追加至模式空间
P:打印模式空间开端至\n内容,并追加到默认输出之前
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间 不包含换行符,则会像发出d命令那样启动正常的新循环

示例

[root@localhost ~]# cat test
here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
Operating System.

[root@localhost ~]# sed '/UNIX$/{N;/\nSystem/s// Operating &/;P;D}' test
here are examples of the UNIX Operating
System. Where UNIX Operating
System appears, it should be the UNIX
Operating System.

h:把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g:从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:把模式空间中的内容与保持空间中的内容进行互换

[root@localhost ~]# cat test
1
2
11
22
111
222

#匹配有1的行,h将将模式空间的内容追加到保持空间,d删除模式空间的内容
[root@localhost ~]# sed '/1/{h;d}' test
2
22
222

此时
模式空间:
空
保持空间:
1
11
111

#匹配有2的行,G将保持空间的内容追加到模式空间
[root@localhost ~]# sed '/1/{h;d};/2/{G}' test
2
1
22
11
222
111

此时
模式空间:
2
1
22
11
222
111

Original: https://www.cnblogs.com/Their-own/p/16698239.html
Author: 事愿人为
Title: sed语句用法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573890/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • VMware虚拟机centOS7下配置桥接网络

    在VMware虚拟机下centOS7下配置桥接网络 首先,在以下的配置都操作好之后,要确认宿主机的网络连接方式, 若为需要认证的网络,则可能会出现宿主机与虚拟机能互相ping,但虚…

    Linux 2023年6月6日
    0136
  • django解析POST过来的json时,Unterminated string starting

    结论:我遇到的问题是与号( &), 分号( ; ), 等号( = ) 都会成为字符串分割符。导致后端解析json参数失败 1.bug产生背景 handsontable插件实…

    Linux 2023年6月8日
    0101
  • Java对象序列化和反序列化

    Java类的序列化和反序列化 序列化:指将对象转换为字节序列的过程,也就是将对象的信息转换成文件保存。 反序列化:将字节序列转换成目标对象的过程,也就是读取文件,并转换为对象。 几…

    Linux 2023年6月14日
    0107
  • IDEA maven项目导包报红线

    原因:没有导入maven包 最后有设置一次,以后就无需设置 1、问题 2、打开Setting 3、将下载好的maven包导入 配置一次,就不用每次都需要配置 1、如果在这个界面先关…

    Linux 2023年6月14日
    0115
  • 快速掌握 Base 64 | Java JS 密码系列

    Java 密码系列 – Java 和 JS Base 64 Base 64 不属于密码技术,仅是编码方式。但由于在 Java、JavaScript、区块链等出现的频率较…

    Linux 2023年6月7日
    0102
  • 【异常】Jenkins构建任务控制台乱码,但是直接执行shell脚本却没有问题

    1 问题现象 构建各种问号 2 检查各种配置 查看Jenkins的文件编码为 ANSI_X3.4-1968 然后直接执行mvn -v命令显示的也不是UTF-8 3 解决方案,直接在…

    Linux 2023年5月28日
    0122
  • 查询windows日志

    系统日志可以用来查看系统的一些信息,比如警告、错误、验证、开关机等。 打开系统日志 按下快捷键 win+R,输入 eventvwr.exe,并点击确定 查询开关机记录 点击左侧 W…

    Linux 2023年6月8日
    0118
  • 【电子取证:FTK Imager篇】FTK Imager制作镜像详细介绍

    以DD镜像制造为例,详细介绍了FTK Imager创建镜像的过程,记得大学的时候学习这些没什么教程,找到的资料也是语焉不详,故在此啰嗦一番—【suy】 一、磁盘镜像制作…

    Linux 2023年6月13日
    01.3K
  • shell生成指定长度的随机数

    生成指定长度是随机数 8位纯数字的随机数 tr -cd ‘0-9’ 使用/dev/urandom而不是/dev/random是因为后者比较慢。 Original: https://…

    Linux 2023年5月28日
    0113
  • Linux上传下载神器之 lrzsz

    在开发的过程中,经常遇到 需要在 Linux 和 Windows 之间上传下载文件的情况 这时,一般都是使用 FTP 或者 WinSCP 工具进行上传下载, 虽然也能解决问题,但是…

    Linux 2023年6月13日
    092
  • 一键安装Cisco AnyConnect Secure Mobility Client

    Mac版本 背景:公司内部安装此VPN软件的时候,因默认是安装了所有模块,但我们只需要vpn模块,所产生的干扰。并且有人因不熟悉Mac pkg 软件的卸载方法导致非正常卸载,导致重…

    Linux 2023年6月8日
    0107
  • JavaScript闭包

    <!doctype html> <html lang="en"> <head> <title>&#x95…

    Linux 2023年6月13日
    084
  • 异步、邮件、定时任务

    异步、邮件、定时任务 14.1 异步任务 编写一个业务测试类 文件路径:com–dzj–service–AsynService.java @Se…

    Linux 2023年6月14日
    0108
  • MySQL之多表查询、Navicat及pymysql

    一、多表查询 1.1 数据准备 — 建表 create table dep( id int primary key auto_increment, name varchar(20…

    Linux 2023年6月14日
    0108
  • Linux 0.11源码阅读笔记-文件IO流程

    文件IO流程 用户进程read、write在高速缓冲块上读写数据,高速缓冲块和块设备交换数据。 何时将磁盘块数据读取到缓冲块? [En] when will the disk bl…

    Linux 2023年5月27日
    090
  • Redis优化总结

    注意在redis.conf中的小聚合数据类型的特殊编码设置(http://carlosfu.iteye.com/blog/2254572) hash-max-zipmap-entr…

    Linux 2023年5月28日
    086
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球