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)

大家都在看

  • Shell实现:基本功能

    独立博客阅读地址:https://panqiincs.me/2017/02/26/write-a-shell-basic-functionality/ Shell的功能 Shell…

    Linux 2023年6月7日
    0130
  • Nginx $remote_addr和$proxy_add_x_forwarded_for变量详解

    $remote_addr 代表客户端IP。注意,这里的客户端指的是直接请求Nginx的客户端,非间接请求的客户端。假设用户请求过程如下: 用&#x62…

    Linux 2023年5月27日
    080
  • vue动画效果和vue组件——day03

    <div id="app"><br> <input type="button" value="&am…

    Linux 2023年6月7日
    078
  • redis 突然大量逐出导致读写请求block

    redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用; redis 中的LRU是如何实现的? 逐出qps…

    Linux 2023年5月28日
    080
  • 学习

    1.1、参考博客 参考的教程如下: Original: https://www.cnblogs.com/agui125/p/16032402.htmlAuthor: 风御之举Tit…

    Linux 2023年6月13日
    099
  • typesafe_cb

    callback 回调函数 什么是callback function 如图(来自维基百科),回调函数提供了一种服务,可以由用户决定使用怎么样的服务(登记回调函数)。回调函数机制,提…

    Linux 2023年6月8日
    0101
  • RedisInsight 安装与使用(Redis 监控工具)【转】

    一、RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具,它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控,…

    Linux 2023年5月28日
    093
  • [转帖]bash shell学习之变量

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年5月28日
    081
  • shell 脚本 根据PID过滤查看进程所有信息

    根据PID过滤查看进程所有信息 #!/bin/bash read -p "输入要查询的PID: " P #筛选第二列等于输入的PID号 n=ps aux | a…

    Linux 2023年5月27日
    0111
  • Redis学习手册(Sorted-Sets数据类型)

    一、概述: Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有…

    Linux 2023年5月28日
    080
  • vim使用心得

    /etc/vimrc 系统整体的vim设定值 ~/.vimrc 用户自己的vim设定值 (此文件的批注为单个双引号) 目前我只设定了: set nu “显示行号 Ori…

    Linux 2023年6月6日
    081
  • LeetCode-16. 最接近的三数之和

    题目来源 题目详情 给你一个长度为 n 的整数数组 nums和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。…

    Linux 2023年6月7日
    095
  • Android(Linux)控制GPIO方法二

    前文《Android(Linux)控制GPIO的方法及实时性分析》主要使用Linux shell命令控制GPIO,该方法可在调试过程中快速确定GPIO硬件是否有问题,即对应的GPI…

    Linux 2023年6月7日
    069
  • SignalR 如何借助redis 实现跨进程通信

    关于redis的订阅和发布功能,这里讲到比较好https://redisbook.readthedocs.io/en/latest/feature/pubsub.html sign…

    Linux 2023年5月28日
    079
  • VMware 和 Linux 的安装

    常见的虚拟机软件有 VMware Workstation(简称 VMware)、VirtualBox、Microsoft Virtual PC 等,本文以 VMware 为例来讲解…

    Linux 2023年5月27日
    080
  • 国产化之x64平台安装银河麒麟操作系统

    背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟v4,CPU使用飞腾处理器。飞腾处理器是ARMv8架构的,在之前的文章中介绍了使用QEMU模拟ARMv8架构安装银…

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