![26b2498fc3e7cb3d0fc9cb3a9948edcd.gif](https://i-blog.csdnimg.cn/blog_migrate/07e70ac60e887d32f14eb019ca312f22.gif)
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。
sed命令有两个空间,一个叫pattern space,一个叫hold space。这两个空间能够证明人类的脑瓜容量是非常小的,需要经过大量的训练和烧脑的理解,才能适应一些非常简单的操作。
不信看下面简单的命令,作用是,删除文件中最后两行。
sed 'N; $!P;$!D;$d' file
在
《Linux生产环境上,最常用的一套“Sed“技巧》
一文中,我们介绍了常用的sed命令和操作,而且使用了两张图来作为辅助。但可惜的是,这两张图,严格来说是不准确的 (比如s命令,只是其中的一个子集),即使它能够帮助初学者快速入门。
本篇属于sed的中级用法,常见在一些sed脚本中,在日常中应用并不多,但往往能够获得意想不到的效果。
原理
工作模式
这要从sed的工作模式来说起。
![997e555e7884141359178608cbf81a5d.png](https://i-blog.csdnimg.cn/blog_migrate/994464e3a61efb2d985e6d20964cb3e5.jpeg)
按照我们读取一个文件的尿性,一般是持续循环读取。比如下面的python代码,print代表p命令。
with open('file', 'r') as f: for line in f.readlines(): print(line)
sed命令在这之上,还缓冲了另外一个东西。那就是“上一行的内容” ,叫做hold space。而当前行,叫做patter space。用python简单表现一下:
hold_space = ""with open('file', '