📜  流编辑器-工作流

📅  最后修改于: 2020-10-16 06:12:06             🧑  作者: Mango


在本章中,我们将探讨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)。