流编辑器 - 工作流程

在本章中,我们将探讨SED的确切工作原理.要成为专家SED用户,需要了解其内部. SED遵循一个简单的工作流程:读取,执行和显示.下图描绘了工作流程.

流编辑器工作流程

  • 读取:SED从输入流(文件,管道或标准输入)读取一行并将其存储在名为模式的内部缓冲区中缓冲区.

  • 执行:所有SED命令都按顺序应用于模式缓冲区.默认情况下,SED命令应用于所有行(全局),除非指定行寻址.

  • 显示:发送(修改) )内容到输出流.发送数据后,模式缓冲区将为空.

  • 重复上述过程,直到文件耗尽.

注意事项

  • 模式缓冲区是私有的,在 - 内存,SED使用的易失性存储区域.

  • 默认情况下,所有SED命令都应用于模式缓冲区,因此输入文件保持不变. GNU SED提供了一种在一个地方修改输入文件的方法.我们将在后面的章节中探讨它.

  • 还有一个名为保持缓冲区的内存区域,它也是私有的,内存中的,易变的存储区域.数据可以存储在保持缓冲区中以供以后检索.在每个周期结束时,SED移除模式缓冲区的内容,但保持缓冲区的内容在SED周期之间保持不变.但是,SED命令不能直接在保持缓冲区上执行,因此SED允许保持缓冲区和模式缓冲区之间的数据移动.

  • 最初模式和保持缓冲区都是空白.

  • 如果没有提供输入文件,则SED接受来自标准输入流(stdin)的输入.

  • 如果默认情况下不提供地址范围,则SED会在每一行上运行.

示例

让我们创建一个文本文件 quote.txt ,以包含着名作家Paulo Coelho的引用.

[jerry]$ vi quote.txt 
There is only one thing that makes a dream impossible to achieve: the fear of failure. 
 - Paulo Coelho, The Alchemist

为了理解SED的工作流程,让我们使用SED显示文件quote.txt的内容.此示例模拟 cat 命令.

[jerry]$ sed '' quote.txt

执行上述代码时,会产生以下结果.

There is only one thing that makes a dream impossible to achieve: the fear of failure.

在上面的例子中,quote.txt是输入文件名,在此之前有一对暗示SED命令的单引号.让我们揭开这个操作的神秘面纱.

第一个SED从输入文件quote.txt中读取一行并将其存储在其模式缓冲区中.然后它在模式缓冲区上应用SED命令.在我们的例子中,没有SED命令,因此不对模式缓冲区执行任何操作.最后,它删除并打印标准输出上的模式缓冲区的内容.是不是很简单?

在下面的例子中,SED接受来自标准输入流的输入.

[jerry]$ sed ''

执行上述代码时,会产生以下结果.

There is only one thing that makes a dream impossible to achieve: the fear of failure. 
There is only one thing that makes a dream impossible to achieve: the fear of failure.

这里,第一行是通过键盘输入的,第二行是SED生成的输出.要退出SED会话,请按ctrl-D(^ D).