Bash 中的 sed 命令

Nilesh Katuwal 2023年1月30日
  1. Bash sed 语法
  2. Bash sed 示例
Bash 中的 sed 命令

sed 命令是一个基于替换概念的流式文本编辑器。

它用于发现、插入、替换和删除文件片段。你可以使用此程序修改文件而无需打开它们。

本教程将介绍 sed Linux 程序的基础知识、其语法以及直接用于搜索和替换文件的正则表达式语法。

Bash sed 语法

sed 通常用于处理来自标准输入或文件的文本流。这意味着你可以将另一个命令的输出直接传递到实用程序的输入进行编辑,或者你可以与已经创建的文件进行交互。

默认情况下,所有结果都发送到标准输出,这意味着它们将显示在屏幕上,而不是保存到文件中,直到重定向。

以下是命令语法:

$ sed [options] commands [file-to-edit]

file-to-edit 表示文件的位置,而 options 表示操作给定文件时的规则。以下是它的一些主要选择:

  • -n, -quiet:每次迭代后,不输出模板缓冲区的内容。
  • -e:运行以进行编辑的命令。
  • -f:从文件中读取编辑命令。
  • -i:在编辑之前创建文件的备份副本。
  • -l:允许你设置行长。
  • -r:支持扩展的正则表达式语法。
  • -s:传输多个文件时,将它们视为单独的流,而不是一个冗长的流。

Bash sed 示例

我们创建了一个名为 demosed.txt 的文件,并将其保存在主目录中,内容如下:

demosed

首先显示主目录中文件 demosed.txt 的第 1 行到第 5 行。

我们将使用 p 命令来执行此操作。我们使用 -n 选项来打印我们需要的内容,而不是在每次迭代时打印模板缓冲区的全部内容。

$ sed -n '1,5p' demosed.txt

输出:

This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.

要输出整个文件(不包括第 1-10 行):

$ sed '1,10d' demosed.txt

我们使用 d 而不是 p 命令来删除文本。在这种情况下,我们没有使用 -n 选项来显示所有内容,因为该实用程序会显示我们使用 delete 命令时未删除的所有内容,而是使用 d 命令清除不需要的内容。

输出:

This is the eleventh line.
This is the twelveth line.
This is the thirteenth line.
This is the fifteenth line.

正如预期的那样,只打印了从 11 到 15 的行。

当我们打开 demosed.txt 时,我们将看到与运行前一个命令时相同的命令。

出于安全考虑,sed 默认情况下不会更改源文件。 -i 选项表示就地编辑,可用于篡改原始文件。

要从文件中删除 14th 行:

$ sed -i '13~15d' demosed.txt

上面的命令没有给出任何输出。让我们看看文件里面的内容。

演示 1

与文件的旧版本相比,我们看到第 14 行带有文本 This is thirteenth line. 不见了。

正则表达式也可以在 sed 中与 options 一起使用。让我们看一个例子。

$ sed '/^nine\|^$\| *nine/d' demosed.txt

输出:

This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.
This is the sixth line.
This is the seventh line.
This is the eighth line.
This is the tenth line.
This is the eleventh line.
This is the twelveth line.
This is the fifteenth line.

'/^nine\|^$\| *nine/' 是检测带有单词 nine 的句子的正则表达式操作。上面的命令不会篡改原始文件,因为我们没有使用 -i,但是我们可以看到带有 nine 的行被过滤掉了。

相关文章 - Bash Command