sed高级命令N、D

sed高级命令

简介

​ sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

​ sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。

​ sed的使用方法,调用sed 命令的语法有两种:

一.在命令行指定sed指令对文本进行处理:sed +选项 ‘指令’ 文件

二.先将sed指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件 文件

​ sed的常用选项:

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

​ -e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项

​ -f:后跟保存了sed指令的文件

​ -i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改

​ -n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行

​ sed中的编辑命令:

​ a:追加 向匹配行后面插入内容

​ c:更改 更改匹配行的内容

​ i:插入 向匹配行前插入内容

​ d:删除 删除匹配的内容

​ s:替换 替换掉匹配的内容

​ p:打印 打印出匹配的内容,通常与-n选项和用

​ =:用来打印被匹配的行的行号

​ n:读取下一行,遇到n时会自动跳入下一行

sed执行过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gkDevumT-1631839513704)(C:\Users\14375\Desktop\专业\Linux\QQ图片20210916162721.png)]

sed高级命令N、D

命令功能
Next (N)将数据流中的下一行加进来创建一个多行组来处理
Delete(D)删除多行组中的一行
N 多行操作命令

​ N 命令会将下一行文本内容添加到缓冲区已有数据之后(之间用换行符分隔),从而使前后两个文本行同时位于缓冲区中,sed 命令会将这两行数据当成一行来处理。

#sed 命令查找含有单词 first 的那行文本。找到该行后,它会用 N 命令将下一行合并到那行,然后用替换命令 s 将换行符替换成空格。结果是,文本文件中的两行在 sed 的输出中成了一行
[root@localhost ~]# cat luo.txt 
This is the header line.
This is the first data line.
This is the second data line.
This is the last line.

[root@localhost ~]# sed '/first/{N;s/\n/ /}' luo.txt 
This is the header line.
This is the first data line. This is the second data line.
This is the last line.

D 多行删除命令

sed 不仅提供了单行删除命令(d),也提供了多行删除命令 D,其作用是只删除缓冲区中的第一行,也就是说,D 命令将缓冲区中第一个换行符(包括换行符)之前的内容删除掉。如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环。

#	sed会查找空白行,然后用 N 命令来将下一文本行添加到缓冲区。此时如果缓冲区的内容中含有单词 header,则 D 命令会删除缓冲区中的第一行。
[root@localhost ~]# cat lcr.txt 

On Tuesday, the Linux System
Administrator's group meeting will be held.
All System Administrators should attend.

Thank you for your attendance.

[root@localhost ~]# sed '/^$/{N ; /System/D}' lcr.txt 
On Tuesday, the Linux System
Administrator's group meeting will be held.
All System Administrators should attend.

Thank you for your attendance.

##	当遇到两个空行时,D 命令只删除两个空行中的第一个。下一次读取该脚本时,这个空行会被另一行读入模式空间。如果那行不为空,那么两行都输出,因此确保了输出一个空行。说白点就是,当模式空间中有两个空行时,只有第一个空行被删除,当一个空行后面跟有文本时,不对模式空间里的内容处理。
[root@localhost ~]# cat lcr.txt 
On Tuesday, the Linux System


Administrator's group meeting will be held.



All System Administrators should attend.

Thank you for your attendance.

[root@localhost ~]# sed '/^$/{N;/^\n$/D}' lcr.txt
On Tuesday, the Linux System

Administrator's group meeting will be held.

All System Administrators should attend.

Thank you for your attendance.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值