注意事项
-
模式缓冲区是 SED 使用的私有内存中易失性存储区域。
-
默认情况下,所有 SED 命令都应用于模式缓冲区,因此输入文件保持不变。GNU SED 提供了一种就地修改输入文件的方法。我们将在后面的部分中探讨它。
-
还有一个内存区域叫做hold buffer这也是私有的、内存中的、易失性的存储区域。数据可以存储在保持缓冲区中以供以后检索。在每个周期结束时,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
执行上述代码时,会产生如下结果。
[jerry]$ sed '' quote.txt
在上面的示例中,quote.txt 是输入文件名,在此之前有一对单引号表示 SED 命令。让我们揭开这个操作的神秘面纱。
首先 SED 从输入文件 quote.txt 中读取一行并将其存储在其模式缓冲区中。然后它在模式缓冲区上应用 SED 命令。在我们的例子中,没有 SED 命令,因此没有对模式缓冲区执行任何操作。最后,它删除并在标准输出上打印模式缓冲区的内容。不是很简单吗?
在以下示例中,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)。