如何使用SED命令从文件中删除行数?

458 阅读5分钟

sed命令被称为流编辑器。sed命令在Linux中用于进行基本的文本转换。

sed命令也是Linux的许多基本命令之一,它在文件操作中起着至关重要的作用。它有很多用途,其中一些主要用途如下。

移除或删除符合给定模式的那一行。

  • 删除带有正则表达式的行。
  • 根据文件的位置,删除一个特定的行。

所以,如果你正在考虑使用sed命令从文件中删除行,请从头到尾阅读我们的文章。我们将向你简要介绍一下删除行的方法

如何使用SED命令从文件中删除行?

在这篇文章中,我们将使用不带-i的sed命令,因为它是一篇示范文章。一个类似的方法是 "干运行 "选项,它显示文件的所有值,而不做任何修改。

使用sed命令,我们可以通过使用-i来删除取决于环境的行。

为了显示sed命令,我们创建一个名为LinuxhintOS.txt的文件。为了提供更好的信息,我们在下面的内容中包括这些行号。

根据位置从文件中删除行

这一部分将解释使用sed命令从文件'LinuxhintOS.txt'中根据其位置删除行。

首先,用下面的命令打开该文件。

cat ~/<foldername>/<filename>

现在执行下面的命令来删除第一行。

sed 'Nd' file

在上面的命令中。

N- 文件中的 "第N "行

D- 删除该文件

所以,让我们在我们的例子中执行这个命令,删除文本文件中的第10行。

cd Documents

sed '10d' LinuxhintOS.txt

删除文件中的最后一行

如果我们必须从文件中删除最后一行,我们将使用'而不是上面使用的语法中N。这里,'而不是上面使用的语法中的'N'。这里,代表最后一行。

sed '$d' file

在这之后,我们的文件将变成这样的内容。

把第一行和最后一行一起删除

如果我们想删除第一行和最后一行,我们必须把上面的两个命令结合起来。

sed 'Nd;$d' filename

使用这个命令,我们的第一行和最后一行都会同时从文件中删除。

正如你在上图中看到的,第一行和最后一行已经从文本文件中被删除。

删除一个范围的行

sed命令可以删除任何范围的行。为此,我们只需要输入 "最小 "和 "最大 "的行数。

在这个例子中,我们将删除从4到7个数字的行。

sed '4,7d' file

删除这些范围的行后,我们的文件将看起来像这样。

删除多行

sed也可以在一个集合中删除多行。正如你所看到的,我们在这个例子中删除了第三、第六、第八和最后一行。

sed '3d;6d;8d;$d' file

当应用上面写的sed命令时,在我们的文件'LinuxhintOS.txt'中发生了以下变化。

删除指定的行或指定的行范围以外的行

通过sed命令,我们从文件中删除那些在命令中没有定义的行,也就是说,除此之外的行被删除。

从这个文件中,我们将删除除数字4到7以外的其余行。

Sed '4,7! d' file

在这里,"!"的符号代表我们不应该从文件中删除这个特定数字的行。

! - 用于保留文件中的特定行数

在这之后,我们的文件将看起来像这样。

删除空白或空行

下面写的sed命令可以从相应的文件中删除空白或空行。

sed '/^$/d' file

由于我们的文件中没有空白或空行,所以没有发生任何变化。

根据模式从文件中删除行

在第二部分,我们将看到,在sed命令的帮助下,我们如何删除类似模式的行。

删除含有模式的行

在这个例子中,下面的命令从文件 "LinuxhintOS.txt "中删除了符合 "System "模式的行。

sed '/System/d' file

因此,我们需要删除那些含有 "不可用 "的行。这就是为什么我们要执行下面的命令。

sed '/Not Available/d’ LinuxhintOS.txt

删除包含一个或几个字符串的行

通过sed命令,我们可以从文件'LinuxhintOS.txt'中删除符合 "未更新 "或 "不可用 "模式的行,该命令是这样的。

sed '/Not Updated\|Not Available/d' LinuxhintOS.txt

删除以特定字符开头的行

我们可以通过sed命令删除所有以任何字符开头的行。我们创建了一个名为 "LinuxhintOS.txt "的新文件,内容如下。

下面的sed命令将删除所有以'A'字符开头的行。

sed '/^A/d' file

我们将从文件中删除以'A'和'L'开头的这些行。为此,我们将使用以下命令。

sed '/^[AL]/d' file

使用sed,我们删除所有以 "A "开头、以 "Linux "结尾的行。

sed '/^(A).*(Linux)/d' file

删除以指定字符结尾的行

这条 sed 命令删除了所有以 "m "结尾的行。

sed '/m$/d' file

下面的 sed 命令将删除以 "M "和 "X "字符结尾的行。

sed '/[xm]$/d' file

以'M'和'X'结尾的字符行被从我们的文件中删除;然后,我们的文件将看起来像这样。

删除所有以大写字母开头的行

我们将使用以下命令从文件中删除所有这些行:大写字母。

sed '/^[A-Z]/d' file

应用上述命令后,我们文件中所有以大写字母开头的行将被删除,我们文件中的变化将是这样的。

删除指定范围内的匹配模式行

在下面这个命令的帮助下,我们将只删除一些定义的具有特定模式的行。

这个例子只删除了文件中1到6行之间具有Linux模式的行。

sed '1,6{/Linux/d;} file

应用该命令后,我们的文件'sed - demo-1.txt'看起来会是这样的。

我们将用下面的sed命令删除第二行,只有当它包含 "openSUSE "模式时。

sed '2{/openSUSE/d;}' file

适当的命令将从我们的文件'sed - demo-1.txt'中删除第二行,因为它有一个特定的模式 "openSUSE"。

适当的命令将从我们的文件'sed - demo-1.txt'中删除第二行,因为它有一个特定的模式 "openSUSE"。

我们还可以使用sed命令删除文件中与 "system "模式相匹配的一行以及下面的一行。

sed '/System/{N;d;}' file

删除具有特定模式的行

你可以使用sed命令删除所有符合 "CentOS "模式的行。

sed '/Centos/,$d' file

删除包含数字/位数的行

使用下面写的sed命令,我们可以删除所有包含'数字'的行。

sed '/[0-9]/d' file

通过在sed命令中做一些修改,我们将从文件中删除所有那些只以数字开头的行。

sed '/^[0-9]/d' file

在这个命令之后,所有以数字开头的行都将从我们的文件中被删除。

同样,通过对命令进行一些修改,我们将只从文件中删除那些以数字结尾的行。

sed '/[0-9]$/d' file

从文件中删除含有字母的行

使用sed命令,我们将从文件'LinuxhintOS.txt'中删除所有包含任何字母字符的行。

sed '/[A-Za-z]/d' file

总结

这篇文章展示了几个使用sed命令从文件中删除行的例子。我们看到在sed命令的帮助下,我们可以很容易地从文件中删除任何行。如果我们记住了这些命令,那么我们就可以在减少时节省大量的时间。