SED高级编辑命令
来源:互联网 发布:哈尔滨java培训机构 编辑:程序博客网 时间:2024/05/18 07:26
sed编辑器被称作流编辑器(stream editor),流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中,并且sed支持正则表达式和扩展正则表达式的使用,这也大大提升了其的实用性,使其成为了当今的LINUX文本处理三剑客。
sed编辑器的工作流程总结如下
(1)从输入文本中读取一行数据到模式空间(pattern space)
(2)在模式空间中根据所提供命令对数据进行匹配
(3)按照命令对数据进行修改
(4)将处理完数据进行输出,在读取下一行数据,如此反复,直至完成全部数据行的处理
通过上图可以看到,sed编辑器中还会有一保持空间,其实在日常的使用中,基本的sed语法就能满足大部分的需求,也就牵扯不到保持空间(hold space)的使用,所以一般都不做讨论,但是关于sed的进阶用法,就需要保持空间的支持了,其可以使得脚本代码更加简洁,甚至会有许多的其妙的用法,下面就对sed的高级编辑命名进行介绍。
一.命令介绍
(1)h/H
h: 把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
(2)g/G
g: 从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
(3)x
x: 把模式空间中的内容与保持空间中的内容进行互换
(4)n/N
n: 读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
(5)d/D
d: 删除模式空间中的行
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环
(6)P:打印模式空间开端至\n内容,并追加到默认输出之前
二. 牛刀小试
其实单一的命令是很好理解的,但难于其组合起来之后的使用,只用对命令有了充分的理解,才能看透多条命令组合所产生的作用。下面我们通过分析几个简单组合命令实例进行练习
(1)sed -n ‘n;p’ FILE
[root@CentOS6 ~]#seq 10 |sed -n 'n;p'246810
由于是初步接触,为了易于理解,我们先模拟出命令运行,再由结果分析其运行过程。通过观察结果,我们发现其输出的结果是:只输出偶数行!
下面分析其运行流程:
1.读取第一行数据到模式空间中
2.(由于n命令)将第二行数据覆盖至模式空间中
3.(由于p命令)输出并清空模式空间内容
4.(由于-n命令)不进行默认输出,读取第三行到模式空间中
这就完成了一次完整的命令流程,直至读取完最后一行,就完成了偶数行输出的效果。
(2)sed ‘1!G;h;$!d’ FILE
[root@CentOS6 ~]#seq 10 |sed '1!G;h;$!d'
这次我们来运行一个较复杂的例子,来试着分析其作用
1.读取第一行数据到模式空间中
2.(由于1!G命令)命令作用范围为非第一行,对本次操作无效,暂时忽略
3.(由于h命令)将模式空间内第一行内容覆盖至保持空间中
4.(由于$!d命令)删除模式空间中内容,导致没有默认输出
5.读取第二行数据到模式空间中
6.(由于1!G命令)符合限制条件,将保持空间内第一行数据追加到模式空间内第二行之后
7.(由于h命令)将模式空间内第二行和第一行内容覆盖至保持空间中
如此反复知道最后一行,不再删除模式空间内内容,完成默认输出。
通过分析,最终的结果应为倒序输出文本,下面我们验证一下结果
[root@CentOS6 ~]#seq 10 |sed '1!G;h;$!d'10987654321
发现分析结果正确。
通过两个分析实例,我们基本掌握了sed高级编辑命令的使用方法,重点在于日后的加以练习及其运用。
- SED高级编辑命令
- 流编辑命令sed
- sed 命令编辑文本
- Linux:编辑命令sed
- 高级Sed命令---N
- linux sed命令 + 高级SED 操作配置文件
- 5.高级编辑命令
- 6.sed高级子命令
- sed,流编辑常用组合命令
- shell脚本编程:sed命令编辑文本
- 高级sed编程1--多行命令
- sed 高级
- sed 命令完全解析--之linux高级命令
- Shell脚本——使用sed命令编辑文本
- sed高级编程--保留空间和否定命令
- Linux-sed命令(基础和高级用法)
- Linux中的高级文本处理命令,cut命令,sed命令,awk命令
- Linux中的高级文本处理命令,cut命令,sed命令,awk命令
- Windows 10 安装spark
- 网联 vs 银联
- 微信小程序开发实践点滴——Bmob常用API的使用
- leetcode-51-N-Queens II
- Python基础四
- SED高级编辑命令
- Java UML类图详解
- 使用Coding.net+Hexo+node.js+git来搭建个人博客
- 算法题/求二进制数中1的个数
- PhotoView的使用
- VMware Workstation虚拟机不能联网的解决办法
- iOS-NSRunLoop详解+++
- flask: hello world
- 用代码实现以下需求