如何使用 sed 流编辑器使用正则表达式修改文本

世界上的每个计算机用户迟早都会手动或自动修改一串文本。 被介绍给 sed 流编辑器它允许您对字符串和文件执行批量文本修改。

命令正则表达式 Line

sed 流编辑器,许多软件默认提供的工具 Linux distributions,允许您以简单直接的方式解析和转换文本,无论该文本是在文件内部还是只是命令行上的字符串。 它还可以分析目录列表、处理列表结果以及可能进入或离开终端会话的大多数其他类型的信息。

检查 sed 是否可用 Linux 分配类型 sed --version 在命令行上:

如果您的版本比此处显示的稍旧,请不要担心。 对于我们在这里讨论的示例,它几乎肯定没问题。 如果该工具在您的发行版中不可用,您可以使用 sudo apt install sed 为了 Ubuntu/Debian 基于操作系统,或 sudo yum install sed 适用于基于 RedHat/RPM 的操作系统。

sed 使用所谓的 RegEx 或正则表达式应用小文本转换。 正则表达式是以人类可读的格式表达更复杂的基于文本的搜索、替换和修改操作的形式和方法。 正则表达式很复杂,初学者可能难以阅读。 您可以阅读我们的指南“您实际上是如何使用 Regex 的?”,了解有关如何读写 Regex 的更多信息。

Regex 实际是如何使用的?

出于本文的目的,我们将坚持使用易于理解和阅读的正则表达式。 例如下面是一个简单的替换:

如您所见,我们回显了一小段文本,然后使用 sed 工具对其进行了转换。 我们使用了 sed ‘s’(替换)命令并指出了我们想要更改的内容。 你可以用另一种方式阅读这个 s|from|to| 哪里’|’ 是部分/字段之间的分隔符,“s”是命令,“from”和“to”是传递给“s”命令的两个选项。

这就是我们如何转变“你好 Cloud 精通 IT 的爱好者! 到 ‘cloudsavvyit.com 的粉丝们好!’ 使用 sed 流编辑器仅更改文本的一部分。 让我们稍微复杂一点 example.

在这里,我们首先使用 3 行创建一个文件 echo 重定向到文件的命令(’>’ 创建一个新文件,如果存在则覆盖同名文件,’>>’ 添加到文件而不修改它)。 然后我们使用显示文件的内容 cat 领域。

然后我们用 sed 工具直接。 为此,我们为 sed 指定“-i”选项,它会在适当的位置编辑文件。 实际的文本转换语句与之前相同。 最后我们在命令末尾指定文件名。 然后我们检查文件的内容并注意我们的输入是如何改变的。

正如您可能开始看到的,或者已经从过去的经验中了解到的,sed 工具中有很多可用的功能。

让我们通过扩展我们的正则表达式和方法来编写 sed 文本转换语句来使事情变得生动起来:

更复杂的正则表达式和 sed 语句

在这个 example, 我们将字母 ‘h’ 替换为 ‘_H’ 并在全局范围内(注意传递给 sed 的第一条语句末尾附近的 ‘g’ 限定符)和不敏感的(注意 ‘i’ 也靠近第一条声明)。 由于“i”限定符,即使文件包含“H”,“h”也会匹配。

然后我们开始一个新的语句(语句以’;’结尾,就像许多其他编码语言一样)我们通过基本上搜索它并用任何东西替换它来删除’.com’。

还要注意我们如何使用不同的字段/命令选项分隔符。 在第一 example 我们使用“|” 总体而言,它是一种易于使用且相当不常见的字段分隔符。 许多人使用“/”,尽管这在解析通常包含“/”的路径名时可能会导致问题。

能够使用不同的字段/命令选项分隔符允许您在文本字符串实际包含或可能包含特定字符时轻松使用另一个分隔符。

对文件使用 sed

让我们探索另一个基于sed的 example 我们将在其中将文本注入文件:

使用 sed 流编辑器注入文本

在这个 example,我们创建了一个包含 5 行的文件,然后使用稍微复杂的 sed 语句在每两行之后注入一个 ‘-‘ 分隔符。 虽然语法大部分是不言自明的,但有趣的是,“r”(从文件中读取/附加文本)命令直接指定注入文件的名称,同时仍在主语句中,没有任何分隔符。。

您可能还会开始看到,除了学习正则表达式的语法之外,深入学习 sed 语法也是有益的。 这几乎就像学习两种新的外语,但好处是 sed 语法可以随着您对额外复杂性的需求而增长。

让我们探索一个 example 我们用其他东西替换特定的文本区域:

使用 sed 修改特定文本区域

在这个 example,我们寻找文本“3”,对于该行,我们将用“Z”替换“C”。 你看口渴是多么多才多艺。

最后,我们可以看到其他输入类型的分析:

用sed解析其他类型的文本输入

如您所见,我们创建了 3 个文件并使用 ls 领域。 然后我们将该输出作为 sed 的输入(使用 Linux 管道命令,’|’) 并将目录列表的一部分变成下划线。

sed 流编辑器是一个多功能工具,可以帮助您直接从终端命令行解析和转换几乎任何文本,无论输入来自简单的 echo 声明,其他 Linux 工具,或来自纯文本文件。 享受!