sed高级命令及模式空间和交换空间简介

高级命令

之前我们用到的sed命令都是一行一行的进行处理文本的,不过有些时候单行处理可能并不能满足我们的需要,所以sed还提供了多行模式,多行模式的命令主要有NPD这三个,
N:读取匹配到的行的下一行追加至模式空间
P:打印模式空间开端至\n内容,并追加到默认输出之前
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间 不包含换行符,则会像发出d命令那样启动正常的新循环
首先还是先看一下N命令的大致流程图,P和D命令在懂了N命令之后也容易理解。

需要注意的是,之所以叫多行模式是因为可以存放不止两行,如下示例:

[[email protected]_161_150_centos ~]# cat /etc/passwd |sed -n ‘2{N;p}‘
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

### 读取第二行的下一行,然后输出模式空间中的内容,此时模式空间中有两行

[[email protected]_161_150_centos ~]# cat /etc/passwd |sed -n ‘2{N;N;N;p}‘
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

### 使用多个N命令可以读取多行进模式空间

模式空间

除了模式空间,sed命令还有另外一个空间叫保持空间,其实保持空间很容易理解,之前我们说sed在处理文本的时候都是在模式空间中进行,但有时候有些复杂的操作单一的模式空间可能无法满足我们的需求于是就有了模式空间,模式空间你可以看作是模式空间的翻版,但是这个空间通常是空闲的,并不处理数据,只在有需要的时候和模式空间进行一些必要的数据交换。下面是模式空间中的常用命令。
h: 把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g: 从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x: 把模式空间中的内容与保持空间中的内容进行互换
打个比方,假如你有两个杯子,
h 就相当于吧二个杯子中的东西替换为第一个杯子中的,
H就相当于把第一个杯子中的东西放到第二个杯子中,并且第二个杯子中的东西还在,
g和h相似,不过是反了过来吧第一个杯子中的东西替换为第二个杯子中的,
G也是和H类似,x就相当于把两个杯子中的东西进行了交换。

下面通过几个示例演示一下

[[email protected]_161_150_centos ~]# seq 1 6| sed -n ‘1,2H;4p;5{x;p}‘
4

1
2

解释一下,-n是不显示默认输出内容,1,2H是将前两行追加至保持空间,4p显示第四行,5{x;p}是在第五行的时候交换保持空间和模式空间中的内容并且输出。注意输出中的空行,这是因为H命令追加的时候是添加换行符,由于保持空间默认是空的,所以添加换行符之后就多了一个空行。以用下面的命令先往保持空间覆盖一行然后追加。

[[email protected]_161_150_centos ~]# seq 1 6| sed -n ‘1h;2H;4p;5{x;p}‘
4
1
2

第一个循环结束之后:模式空间为空,保持空间为第一行内容
第二个循环,将第二行追加到模式空间,此时模式空间为两行内容
第三个循环,没有匹配内容,不执行操作,模式空间和保持空间内容不变
第四个循环,读取第四行并输出,保持空间内容不变
第五个循环,读入第五行,然后和保持空间中的内容交换,之后输出。

原文地址:http://blog.51cto.com/13672361/2110213

时间: 2024-10-09 16:26:24

sed高级命令及模式空间和交换空间简介的相关文章

linux:sed高级命令之n、N(转)

sed的语法格式: sed [option] {sed-command} {input-file} sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-command(sed命令)”就一条接着一条进行处理,知道脚本执行完毕.然后该行呗输出,模式(pattern space)被清空:接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕. 但是,由于种种原因,如用户希望在某个条件下,脚本中的某个命令被执行或希望模式空间(pattern spac

sed高级命令小记

sed高级命令: g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容被覆盖 G:将hold space中的内容append到pattern space\n后 h: 将pattern space中的内容拷贝到hold space中,原来hold space里的内容被覆盖 H: 将pattern space中的内容append到hold space\n后 d: 删除pattern中的所有行,并读入下一新行到pattern中 [[email 

sed高级命令

所谓高级,主要是指这里将要提到的命令都能改变sed执行或者控制的流程顺序(sed通常都是一行被读入模式空间,并用脚本中的sed命令一个接一个的应用于那一行). 高级sed命令分成3个组: 1)处理多行模式空间(N.D.P). 2)采用保持空间来保存模式空间的内容并使他们可用于后续的命令(H.h.G.g.x). 3)编写使用分支和条件指令的脚本来更改控制流(:.b.t). 1.N命令:追加下一行 多行Next(N)命令通过读取当前行的下一行,并把两行拼成一行来进行接下来的处理. [email pr

字符及文本处理之sed:sed使用高级命令

三.sed高级编辑命令      t,T,D,P,n,N,H,h,g,G 前面的基本用法已经可以满足基本应用,但sed还有一些高级用法(装X利器),要学习sed高级命令首先要理解清楚sed的另一个缓冲区"保持空间". 前面基本用法中也有提到模式空间,即为处理文件中一行内容的一个临时缓冲区.处理完一行之后就会把模式空间中的内容打印到标准输出,然后自动清空缓存. 而这里说的保持空间是sed中的另外一个缓冲区,此缓冲区正如其名,不会自动清空,但也不会主动把此缓冲区中的内容打印到标准输出中.而

Linux下安装Oracle10g提示交换空间检查失败

如图: 安装Oracle10时提示交换空间检查失败.交换空间期望值是2790M,实际只有1498M. 解决方法: 新建临时swapfile或者是空闲分区,其大小为2790-1498=1292M,在需要时设定为交换空间. 步骤: 1.查看当前磁盘大小 [[email protected] ~]# df -lh Filesystem      Size     Used    Avail    Use%     Mounted on /dev/sda2       14G     11G     2

内存交换空间的使用

当系统物理内存不足时,内存交换空间(swap)用来紧急应付内存不足的情况,和windows中虚拟内存用法差不多. 使用物理分区构建swap空间 1.首先新建一个swap分区/dev/sda4 2.构建swap格式 3.查看与加载 使用swapon启用 使用swapon –s 查看 4.禁用swap分区 使用swapoff命令 使用文件构建swap 使用dd这个命令新增一个256MB的文件在/tmp下面 使用mkswap将/tmp/swap这个文件转换为swap空间 使用swapon命令启用/tm

sed的模式空间和保持空间

摘自:https://blog.csdn.net/wanglelelihuanhuan/article/details/51591809 sed的模式空间和保持空间 2016年06月06日 17:15:07 wanglelelihuanhuan 阅读数:3022 标签: shell脚本sed 更多 所属专栏: 王乐乐 sed之所以能以行为单位的编辑或修改文本,其原因在于它使用了两个空间:一个是活动的"模式空间(pattern space)",另一个是起辅助作用的"保持空间(h

文本处理三剑客之 Sed ——高级编辑命令

本篇介绍sed的高级编辑命令 高级编辑命令 P:打印模式空间开端至\n内容,并追加到默认输出之前 n: 读取匹配到的行的下一行覆盖至模式空间 N:读取匹配到的行的下一行追加至模式空间 h: 把模式空间中的内容覆盖至保持空间中 H:把模式空间中的内容追加至保持空间中 g: 从保持空间取出数据覆盖至模式空间 G:从保持空间取出内容追加至模式空间 x: 把模式空间中的内容与保持空间中的内容进行互换 d: 删除模式空间中的行,并进入下一个循环 D: 删除当前模式空间开端至\n的内容,放弃之后的命令,之后

Linux命令 swap:内存交换空间

swap 内存交换空间的概念 swap使用上的限制