sed命令:pattern space(模式空间)和hold space(保留空间)
关于pattern space和hold space的关键交互命令
- x :Exchange the contents of the hold and pattern spaces. 交换hold space和pattern space的内容.
- h、 H: Copy/append pattern space to hold space. 复制/追加pattern space的内容到hold space.
- g、 G: Copy/append hold space to pattern space. 复制/追加hold space的内容到pattern space(注:用man命令查询)
例题展示
为了方便大家更好的理解pattern space与hold space之间的区别,我用一个简单的例题来辅助说明。
- 自己编辑一个文件text.txt,内容如下:
0.0.0.0
1.1.1.1
2.2.2.2
输出以下形式:
0.0.0.0:80,1.1.1.1:80,2.2.2.2:80
简单分析一下题目,我们要进行的主要是两个操作,一是在每行末尾插入“:80”,二是将换行符替换成“,”号。由于sed语句对行处理的便利性可知,先进行插入操作,再进行替换操作是不错的选择。
sed -i 's/$/:80/' text.txt
这样一条简单的语句即可完成第一步操作
这是操作后的结果:
第二步也是关键的一步,如果我们直接使用s命令进行替换操作
sed -i 's/\n/,/ ' text.txt
再cat一下,我们会发现没有实现把换行替换成“,”的操作。
这是为什么呢,原因是sed命令它进行运算时是先将数据一行一行读入pattern space,然后在pattern space中处理一行,就会将原先那一行的数据清除,不会保留上一行的数据,也就导致计算机无法读取到换行符,从而替换操作失效。