- Sed 教程
- Sed - 首页
- Sed - 概述
- Sed - 环境
- Sed - 工作流程
- Sed - 基本语法
- Sed - 循环
- Sed - 分支
- Sed - 模式缓冲区
- Sed - 模式范围
- Sed - 基本命令
- Sed - 特殊字符
- Sed - 字符串
- Sed - 模式管理
- Sed - 正则表达式
- Sed - 有用技巧
- Sed 有用资源
- Sed - 快速指南
- Sed - 有用资源
- Sed - 讨论
流编辑器 - 工作流程
在本章中,我们将探讨 SED 的确切工作原理。要成为一名专家级的 SED 用户,需要了解其内部机制。SED 遵循一个简单的工作流程:读取、执行和显示。下图描述了该工作流程。
读取:SED 从输入流(文件、管道或标准输入)读取一行,并将其存储在其称为模式缓冲区的内部缓冲区中。
执行:所有 SED 命令都按顺序应用于模式缓冲区。默认情况下,SED 命令应用于所有行(全局),除非指定了行寻址。
显示:将(修改后的)内容发送到输出流。发送数据后,模式缓冲区将为空。
上述过程重复,直到文件耗尽。
注意事项
模式缓冲区是 SED 使用的一个私有的、内存中的、易失性存储区域。
默认情况下,所有 SED 命令都应用于模式缓冲区,因此输入文件保持不变。GNU SED 提供了一种就地修改输入文件的方法。我们将在后面的章节中探讨它。
还有一个名为保持缓冲区的内存区域,它也是一个私有的、内存中的、易失性存储区域。数据可以存储在保持缓冲区中,以便以后检索。在每个循环结束时,SED 会删除模式缓冲区的内容,但保持缓冲区的内容在 SED 循环之间保持持久。但是,SED 命令不能直接在保持缓冲区上执行,因此 SED 允许在保持缓冲区和模式缓冲区之间移动数据。
最初,模式缓冲区和保持缓冲区都为空。
如果没有提供输入文件,则 SED 从标准输入流 (stdin) 接收输入。
如果没有提供地址范围,则默认情况下 SED 对每一行进行操作。
示例
让我们创建一个文本文件quote.txt,其中包含著名作家保罗·科埃略的一段引言。
[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)。