如何用sed删除空行

2,139 阅读3分钟

有两种可能的方法可以用sed删除文本文件中的空行;下面列出了这些方法,并在本指南的下一部分中详细讨论。

  • 方法1:如何用sed删除文本文件中的所有空行
  • 方法2:如何用sed删除文本文件中的特定行

方法1:如何用sed删除文本文件中的所有空行

在深入研究这个方法之前,让我们了解一下使用sed删除空行的语法。

语法

sed [options] ‘/^$/d’ [file name]

/^/d是这个命令的核心部分;其中""符号表示删除必须从头开始执行,即从第一行开始;"/d**'是这个命令的核心部分;其中"**^**"符号表示删除必须从头开始执行,即从第一行开始;"**"表示必须到文本文件的最后一行,"d"表示删除正在进行中。

本节将指导你在流编辑器(sed)的帮助下删除一个文本文件中的所有行。

我们创建了一个文本文件 "delete.txt";首先,使用 "cat"命令获得该文件的内容,如下所示,我们使用了"-n"选项,这样我们也可以获得行数。

我们观察到有多个空行,它们影响了这个文本文件的美观,读者可能不会注意到这些内容。

$ cat -n delete.txt

Text Description automatically generated

因此,为了避免上述情况,你必须删除这些空行,以简化阅读过程;下面提到的命令将从 "delete.txt"文件中删除所有这些行。

现在你可以注意到,空行被洗掉了,只有那些包含一些文字的行被打印出来,但结果只显示在终端上,而原始文件保持不变。

$ sed ‘/^$/d’ delete.txt

Text Description automatically generated

如果你想删除空行并更新原始文件,那么你必须使用原地选项"-i",下面提到的命令将帮助你这样做。

$ sed -i ‘/^$/d’ delete.txt

Text Description automatically generated

方法2:如何使用sed删除文本文件中选定的空行

在一个文本文件中删除特定行的语法写在下面。

语法

sed [options] ‘(line-number)d’ [filename]

该命令所依赖的语法的主要部分是"(line-number)d'";你必须在"(line-number)"中输入空行的确切行号,字母 "d"表示插入的行号将被删除。

你可以使用sed命令删除文本文件中的一些特定行;我们为这一部分创建了一个新的文本文件 "new.txt"。例如,下面命令的输出显示行号 "2"是空的。

$ cat -n newfile.txt

Text Description automatically generated

如果你想运行命令只删除这一行,那么你必须像我们在下面提到的命令中那样指定行号。

$ sed ‘2d’ newfile.txt

Text Description automatically generated

你也可以用这种方法删除连续的行;例如,"new.txt"文件有3个空行 "4,5,6",在下面的图片中可以看到。

$ cat -n new.txt

Text Description automatically generated

要删除这三个连续的行;你必须在开始和结束的行号之间插入",",正如在下面的命令中可以看到。

$ sed ‘4,6d’ new.txt

Text Description automatically generated

最后,你也可以使用到位的选项"-i"来永久保存修改的内容,因为如果没有这个选项,sed命令会在终端打印出结果,我们已经修改了上面的命令,使用了"-i"选项。

$ sed -i ‘4,6d’ new.txt

Text Description automatically generated

结论

Ubuntu支持多种方法来处理文本文件中的数据;例如,你可以使用Ubuntu的默认文本编辑器、nano编辑器等。然而,Ubuntu的sed命令行工具是所有这些编辑器中的佼佼者,因为它具有从终端访问文件和不打开文件进行修改的功能。在这篇文章中,我们使用sed命令来删除文本文件中的空行,并描述了这种操作的两种方法。"方法1"特别适用于当你在一个文本文件中有数百行,并且你想一次删除所有的空行。另一方面,"方法2"适用于删除小文件中的空行,你可以一个一个地删除行。然而,如果你想遵循 "方法2",你必须自己寻找空行。因此,如果对两种方法进行比较,"方法1"在删除空行方面优于 "方法2"。