sed用法

基础sed命令

sed OPTIONS… [SCRIPT] [INPUTFILE…]

常用的选项:

-n,–quiet: 不输出模式空间中的内容

-i: 直接编辑原文件,默认不对原文件进行操作

-e: 可以使用多个命令(脚本)进行操作

-f /path/from/sed_script: 从指定的文本中读取处理脚本

-r: 使用扩展正则表达式

替换标记
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:把一个或多个字符替换成另一个字符
a的用法

[root@localhost ~]# vim xbz
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '3abbxxxx' xbz //在第三行下面(第四行)进行新增
a b c
d
c
bbxxxx
b
a
[root@localhost ~]# sed '/c/abbxxxx' xbz  //在匹配的参数(c)下一行进行添加
a b c
bbxxxx
d
c
bbxxxx
b
a

c的用法


[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '2cxxb' xbz //取代第二行
a b c
xxb
c
b
a
[root@localhost ~]# cat xbz
a b c
d
c
b
a

[root@localhost ~]# sed '/d/caa' xbz  //在匹配的参数(d)进行取代
a b c
aa
c
b
a

d的用法

root@localhost ~]# cat xbz
a b c
d
c
b
a

[root@localhost ~]# sed '1d' xbz //删除第一行
d
c
b
a

[root@localhost ~]# cat xbz
a b c
d
c
b
a

[root@localhost ~]# sed '/c/d' xbz //在匹配的参数(c)进行整行删除
d
b
a

i的用法

[root@localhost ~]# cat xbz
a b c
d
c
b
a

[root@localhost ~]# sed '2i3838' xbz  //在第二行进行插入
a b c
3838
d
c
b
a

[root@localhost ~]# cat xbz
a b c
d
c
b
a

[root@localhost ~]# sed '/c/i6868' xbz //在匹配的参数(c)那一行进行插入
6868
a b c
d
6868
c
b
a

p的用法

[root@localhost ~]# cat xbz
a b c
d
c
b
a

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

s的用法

[root@localhost ~]# cat xbz
a b c
d
c
bbb
a

[root@localhost ~]# sed 's/b/a/' xbz //将匹配的参数(b)每行里的第一个参数进行替换
a a c
d
c
abb
a
[root@localhost ~]# cat xbz
a b c
d
c
bbb
a

[root@localhost ~]# sed 's/b/a/g' xbz //在上面的基础是加上g就可以全部进行替换
a a c
d
c
aaa
a

n的用法
此处的n不是sed -n的n的那种用法,是n读取下一个输入行

[root@localhost ~]# cat xbz
a b c
d
c
bbb
a

[root@localhost ~]# sed -n '/a/n;p' xbz //匹配到的参数(a)下面的所有行
d
c
bbb

y的用法

[root@localhost ~]# cat xbz
a b c
d
c
bbb
a
[root@localhost ~]# sed '3y/c/C/' xbz //将匹配到的第三行小写c改为大写C
a b c
d
C
bbb
a

高阶sed命令

模拟空间:
当前处理输出的缓冲空间,因为sed就是一次处理一行的内容,就会把这一行的内容提取到模式空间,然后用sed命令处理这一行的内容,处理完成后输出到屏幕,接着处理下一行 的内容
保持空间:
保持空间就是sed的另一个缓冲区,此缓冲区如其名,不会自动清空内容,也不会把缓冲区的内容打印到的标准输出中
模式空间与保持空间的关系
模式空间:相当于流水线,文本行再模式空间中进行处理;
保持空间:相当于仓库,在模式空间对数据进行处理时,可以把数据临时存储到保持空间;作为模式空间的一个辅助临时缓冲区,但又是相互独立,可以进行交互,命令可以寻址模式空间但是不能寻址保持空间。可以使用高级命令h,H,g,G与模式空间进行交互。

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

[root@localhost ~]# cat xbz.txt
Consult Section 3.1 in the Owner and Operator
Guide for a description of the tape drives
available on your system.

[root@localhost ~]# sed -n '/Operator$/{N;p}' xbz.txt
Consult Section 3.1 in the Owner and Operator
Guide for a description of the tape drives
[root@localhost ~]# sed -n '/Operator$/{N;s/Owner and Operator\nGuide/installation Guide/g;p}' xbz.txt
Consult Section 3.1 in the installation Guide for a description of the tape drives
[root@localhost ~]# sed '/Operator$/{N;s/Owner and Operator\nGuide/installation Guide/g}' xbz.txt
Consult Section 3.1 in the installation Guide for a description of the tape drives
available on your system.

//我们假设想要将“Owner and 0perator Guide”换成“lnstallation Guide”,但是我们发现它出现在文件中的两行上,“Operator”和“Guide”被分开了。
Owner and Operator Guide 换成 installation Guide
空格用\n

D多行删除

[root@localhost ~]# cat test

This is the header line.

This is a data line.

This is the last line.

[root@localhost ~]# sed '/^$/{N ; /header/D}' test //删除模式空间的第一行
This is the header line.

This is a data line.

This is the last line.

P多行打印

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

[root@localhost ~]# sed -n '/UNIX$/p' xxb
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;p}' xxb
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
Operating System.

[root@localhost ~]# sed -n '/UNIX$/{N;/\nSystem/{p}}' xxb
Here are examples of the UNIX
System. Where UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;/\nSystem/{s// Operating &/g;p}}' xxb
Here are examples of the UNIX Operating
System. Where UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;/\nSystem/{s// Operating &/g;P;D;p}}' xxb
Here are examples of the UNIX Operating
System. Where UNIX Operating

保持空间

命令 缩写 功能 Hold h(复制)或H (追加) 上传 将模式空间的内容复制或追加到保持空间 Get g或G下载 将保持空间的内容复制或追加到模式空间 Exchange x 交换保持空间和模式空间的内容

[root@localhost ~]# cat abc
1
2
11
22
111
222
[root@localhost ~]# sed '/1/{h;d};/2/G' abc //匹配1将内容放入保持空间,删除,在将匹配2的内容追加模式空间
2
1
22
11
222
111

Original: https://www.cnblogs.com/tushanbu/p/16699459.html
Author: 涂山布
Title: sed用法

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

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

(0)

大家都在看

  • Ubuntu18.04 显卡驱动安装(解决各种疑难杂症)

    步骤 下载驱动 准备工作 进行安装 检查安装 下载驱动 首先我们需要去官网下载显卡驱动 打开浏览器,在百度搜索框中搜索:显卡驱动 下载 在 手动搜索驱动程序一栏,根据自己的显卡进行…

    Linux 2023年6月14日
    0120
  • 学习颜色搭配

    html;gutter:true; Color</p> <pre><code> .font-style { font-size: 50px; w…

    Linux 2023年6月13日
    0152
  • 为Linux系统添加定时备份Mysql(Docker)指定数据库的方法

    引言使用Mysql的时候遇到需要定时备份数据库的问题,但苦于Mysql自身没有提供直接的工具。 安装7z的目的主要是用于对数据库备份后的文件的压缩和加密。如果不需要也可以跳过此步骤…

    Linux 2023年5月27日
    078
  • Vim 编辑器|批量注释与批量取消注释

    添加注释 ctrl + v 进入块选泽模式。 上下键选中需要注释的行。 按大写 I 进入插入模式,输入注释符。 按两次 ESC 退出,即完成添加注释。 取消注释 ctrl + v …

    Linux 2023年5月27日
    0114
  • NewReplacer使用技巧

    上次写博客至今有段时间了,这些日子,认真过,努力过,职场中不管有哪些让人失意或不快的事,终归到底,是自己不够强大。。。 好吧,新的一年,不磨磨唧唧了,一般处理xss漏洞使用正则匹配…

    Linux 2023年6月6日
    0105
  • Laxcus集群操作系统的分布计算模型

    分布计算模型,你把可以把它理解为分布式编程规范和计算机程序的组合。按照分布式编程规范和系统提供的分布式编程API接口,用户能够快速开发符合Laxcus集群操作系统要求的分布式应用软…

    Linux 2023年6月6日
    079
  • Windows 添加nginx到服务

    一、下载nginx 地址:http://nginx.org/en/download.html (稳定版) 解压到相应的磁盘,本文是:E:\nginx\nginx-1.18.0 二、…

    Linux 2023年6月8日
    0117
  • Linux下出现Permission denied解决

    输入命令设置root密码 sudo passwd 得到的答复是 We trust you have received the usual lecture from the loca…

    Linux 2023年6月14日
    095
  • 线程

    一、线程概念的引入 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区…

    Linux 2023年6月14日
    097
  • linux全新机器环境搭建流程梳理

    软件解压后安装基础指令(复制用):./configure && make && make install ./configure –pr…

    Linux 2023年6月6日
    090
  • Windows下 RabbitMQ的安装和配置

    简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放…

    Linux 2023年6月14日
    0101
  • 【证券从业】金融基础知识-第五章 债券01

    注1:后续学习并整理到第八章,全书完结后再合并成一个笔记进行源文件分享 注2:本章内容巨多,大约分为两篇文章记录消化 posted @2022-06-08 01:30 陈景中 阅读…

    Linux 2023年6月13日
    082
  • 误操作使用fdisk删除了/root所在分区,该如何把文件拷贝出来

    误操作 fdisk命令误操作,将 /root 所在分区删除后新建了…… 恢复尝试1 起初以为是改一下 /etf/fstab 就好了,于是进入急救模式,尝试 …

    Linux 2023年6月8日
    0134
  • 使用 Docker 安装 Zabbix,并配置自定义监控项

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 一、Zabbix 简介 Zabbix 可以用来监控各种网络参数,来保证服务器和系统的安全运行。并且 Zabbix 还提供了灵活的…

    Linux 2023年5月27日
    0142
  • docker相关命令杂理

    – 2020.11.16docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] #保存现有的镜像 # docker commit …

    Linux 2023年6月8日
    093
  • Docker如何镜像加速

    原文链接:https://www.zhoubotong.site/post/69.html在使用Docker 下载镜像时,如果不配置镜像加速,下载镜像会比较慢,因为国内从 Dock…

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