目录
一、sed 有两个内置的存储空间:
模式空间: 如你所知,模式空间用于 sed 执行的正常流程中。该空间 sed 内置的一
个缓冲区,用来存放、修改从输入文件读取的内容,每处理完一行都会清空模式空间在读取下一行。
保持空间:保持空间是另外一个缓冲区,用来存放临时数据。sed 可以在保持空间
和模式空间交换数据,但是不能在保持空间上执行普通的 sed 命令。我们已经讨论
过,每次循环读取数据过程中,模式空间的内容都会被清空,然而保持空间的内容
则保持不变,不会在循环中被删除。(保持空间默认有换行符,文件里有几行内容就有几行换行符)
首先 g 命令是将保持空间的内容覆盖至模式空间,保持空间默认有换行符,从保持空间取了一个换行符与保持空间的一行交换,然后依次交换。
而 G 命令就是将保持空间的内容追加到模式空间,所以从保持空间拿一个换行符追加到模式空间里,所以整体效果就是一行和一行之间空着一行。
二、高级编辑命令:
- h:把模式空间中的内容覆盖至保持空间中
- H:把模式空间中的内容追加至保持空间中
- g:把保持空间中的内容覆盖至模式空间
- G:把保持空间中的内容追加至模式空间
- n:读取下一行到模式空间。
- N:将下一行添加到模式空间中。将当前读入行和用N命令添加的下一行看成“一行”。
- d:删除模式空间中的行
- D:删除多行模式空间中的所有行
- x:将模式空间中的内容和保持空间中的内容互换
1、命令n与N
命令n
读取下一行到模式空间。由于模式中有按照正常流程读取的内容,使用n命令后,模式空间中又有了一行,此时,模式中有2行内容,但是先读取的那一行不会被取代、覆盖或删除;当n命令后,还有其他命令p的时候,此时打印出的结果是n命令读取的那一行的内容。
命令N
将下一行添加到模式空间中。将当前读入行和用N命令添加的下一行看成“一行”。N 追加换行符\n 到当前模式空间的最后,然后从输入文件读取下一行数据,追加进来。