模式空间与保持空间

模式空间与保持空间

sed在正常情况下将处理的行读入模式空间(pattern space),脚本中的"sed command"就是一条接着一条进行处理,直到脚本执行完毕,然后该行被输出,模式被清空,接着重复执行刚才的动作,文件中新的一行被读入,直到文件处理完毕。
一般情况下,数据的处理只使用模式空间,但在某些时候,使用保持空间(hold space),还可以带来意想不到的效果
模式空间:直接处理数据
保持空间:数据的暂存区域
sed命令:
+g:将hold space中的内容拷贝到pattern space中,原来的pattern space里的内容清除
+G:hold space中的内容添加到pattern space\n后
+h:将pattern space中的内容拷贝到hold space中,原来的hold space里的内容清除
+H:将pattern space中的内容添加到hold  space\n后
+d:删除pattern中的所有行,并读入下一新行到pattern中
+D:删除multiline pattern中的第一行,不读入下一行
+X:交换保持空间和模式空间的内容
+n:读取下一行到模式空间
+N: 将下一行添加到模式空间
示例:
1.给每一行结尾加一行空行
模式空间与保持空间_第1张图片
2.用sed模拟出tac的功能(倒序输出)
注:1!G第一行不执行"G"命令,从第二行开始执行。$!d最后一行不删除,保留最后一行
模式空间与保持空间_第2张图片
3.追加匹配行到文件结尾
模式空间与保持空间_第3张图片
4.行列转化
模式空间与保持空间_第4张图片
H表示把pattern space的内容追加到hold space中去,H可以带一个地址,这里用的是$,表示到文件的末尾,然后用x将之取到pattern space中,把\n替换成空格再打印即可
5.求1~100的和
方法一:

方法二:
seq 100 | sed ':a;N;s/\n/+/g;{$!ba}'
注释::a表示标签a,ba表示跳转到a标签,$表示最后一行,!表示不做后续操作,$!ba表示最后一行不用跳转到a标签,结束此次操作。

6.打印奇偶行
模式空间与保持空间_第5张图片


你可能感兴趣的:(模式空间与保持空间)