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.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值