使用 Sed 命令掌握文本操作

Mastering Text Manipulation With the Sed Command

Linux 命令行界面提供了丰富的文本处理工具,其中最强大的工具之一是 sed 命令。 Sed 是 Stream EDitor(流编辑器)的缩写,是一个多功能的工具,可以对文本文件和流进行复杂的处理。

什么是 Sed?

Sed 是一个非交互式的文本编辑器,可以对管道输入或文本文件进行操作。 通过向其提供指令,您可以使其修改和处理文件或流中的文本。 sed 最常见的用例包括选择文本、替换文本、修改原始文件、向文本添加行或从文本中删除行等操作。 它可以从 Bash 和其他命令行 Shell 中使用。

Sed 命令语法

sed 命令的语法包含三个主要部分

  1. 选项: 这些控制命令的输出。
  2. 脚本: 这包含要运行的命令列表。
  3. 输入文件: 这是您使用 sed 命令操作的文件。

在没有文件名的情况下,脚本对标准输入数据进行操作。 您也可以在没有任何选项的情况下运行 sed 命令。 基本语法如下

sed OPTIONS [SCRIPT] [INPUTFILENAME]​​

Sed Vs. Awk

Sed 并不是 Linux 生态系统中唯一的文本处理工具。 另一个强大的实用程序是 awk。 虽然它们都处理文本,但它们有一些关键区别

  • Sed 擅长使用紧凑而简单的语言来解析和转换文本,使其简单而有限,但易于使用。
  • 另一方面,Awk 是一种文本处理工具,可以编写强大程序的语句。 它比 sed 更复杂、更通用、更强大,但也更难使用。

通过示例探索 Sed

让我们通过一些实际示例更深入地了解 sed 的工作原理。 对于所有这些示例,假设我们有一个名为 ik.txt 的文件。 请注意,默认情况下,sed 不会更改原始文件。 所有更改都将显示在输出中,但原始文件将保持不变。

替换文本

sed 中最常见的操作之一是文本替换。 这是使用 s 命令完成的。 例如,要将模式 abc 的第一个实例替换为另一个模式 def,请使用

sed s/abc/def/ ik.txt

这里,每行中 abc 的第一个实例才会被替换为 def。 如果要替换模式的第三个实例,可以使用

sed s/abc/z/3 ik.txt

全局替换

在全局替换中,将替换模式的所有实例。 这是通过将 g 附加到替换命令来实现的。 要将所有 abc 实例替换为 XYZ,请使用

sed s/abc/XYZ/g ik.txt

您还可以使用 /ng 从模式的第 n 个实例开始全局替换。 例如,要将所有 abc 实例替换为 XYZ,从第三个实例开始,请使用

sed s/abc/XYZ/3g ik.txt

总之,Linux 中的 sed 命令是一个强大的流编辑器,可以对文本文件和流执行多种操作。 它不提供交互式界面,而是根据我们提供的指令对管道输入或文本文件进行操作。 该命令的语法相对简单,由三个部分组成:选项、包含要运行的 Linux 命令的脚本和文件名。

George Whittaker 是 Linux Journal 的编辑,也是一位定期撰稿人。 George 从事技术写作已有二十年,并且已经使用 Linux 超过 15 年。 在空闲时间,他喜欢编程、阅读和玩游戏。

加载 Disqus 评论