您可以使用 Vim 或 Nano 等文本编辑器,输入文件并删除所需的行,但是,这种方法不适合使用 bash 脚本进行自动化。

相反,您可以使用强大的 sed 命令行编辑器并删除符合特定条件的行,当然,您可以在 shell 脚本中使用 sed。

从文件中删除第 n 行

想象一下,您必须删除文件中的第 7 行号,您可以像这样使用 sed 命令:

sed -i '7d' filename

让我解释一下它是如何工作的:

  • -i:此选项启用就地编辑,默认情况下,sed 只会显示输出。使用此-i选项,它会修改实际文件而不将其显示在显示器上。
  • 7d: 这里 7 是行号,d指示删除行。
  • filename: 这是你要修改的文件,如果文件位于其他目录中,您还可以提供绝对或相对路径。

让我用一个真实的例子来展示,这是一个名为 wljslmz.txt 的示例文本文件:

学技术
上网络技术联盟站
找教程
也上网络技术联盟站
涨知识
还上网络技术联盟站
加工资
必须上网络技术联盟站

要从此文件中删除第 4 行,我使用:

sed '4d' agatha.txt

这将导致以下显示删除了“也上网络技术联盟站”行:

学技术
上网络技术联盟站
找教程
涨知识
还上网络技术联盟站
加工资
必须上网络技术联盟站

现在,假设您想在 Linux 命令行中删除文件的第一行,像这样使用 sed:

sed -i '1d' filename


????如果您想在不修改文件本身的情况下查看操作结果,请不要使用-ised 命令的选项。


使用 sed 删除最后一行

您学会了删除特定行,但如果您需要删除最后一行怎么办?

您可能总是使用 wc 命令获取文件中的总行数,并将此数字与 sed 一起使用。但是,sed 有一种删除文件最后一行的专用方法,您现在不必再担心文件的数量了。

sed -i '$d' filename.txt

删除一系列行

与您之前看到的类似,您也可以从文件中删除一系列行。

假设您必须删除从 11 到 15 的行,您可以提供这样的范围:

sed -i '11,15d' filename

请注意,它还将删除第 11 行和第 15 行,而不仅仅是位于它们之间的行。

删除包含字符串的行

您还可以使用 sed 删除包含给定字符串或匹配特定模式的所有行。

下面的命令将删除所有包含单词 ‘string’ 的行:

sed -i '/string/d' filename

请注意,这是一个区分大小写的搜索,您也可以使用正则表达式模式而不是常规字符串。

删除以单词开头的行

如果要删除以特定单词或字母开头的所有行,只需提供如下正则表达式模式:

sed -i '/^word/d' filename

额外提示:删除所有空行

在结束本文之前,让我快速分享一下如何使用 sed 删除所有空行:

sed -i '/^$/d' filename