首页>国内 > 正文

在 Linux 命令行中删除文件中的某一行

2022-11-08 09:45:21来源:TIAP

我们大家都知道,在 vim 中删除文件中的某几行很简单,只需要按下 dd 键即可。那么,在不主动打开文件的情况下,通过命令行怎样删除文件中特定的某行呢?

使用像 rm 这样的命令,会删除整个文件,但我们并不希望这样做。使用 vim 或者 nano 这样的文本编辑器,并不适用于 bash 脚本的自动化。


(资料图)

合适的方案,是使用 sed 命令,它可以在 shell 脚本中使用。

我们今天将介绍几种使用的场景和例子。

注意,我们介绍的例子会修改原始文件,所以如果大家在平时使用或者练习的时候,最好先做好备份。

从文件中删除某一行

假如我们要删除文件中的第7行,那么可以这样使用 sed 命令:

sed -i "7d" filename

我们来解释一下上述命令:

-i:该选项启用在位编辑(in-place editing)。默认情况下,sed 只显示输出,使用 -i 选项,它修改实际文件,但是不在显示其中显示;7d:这里 7 是行号,d 指删除该行;filename:要修改的文件,如果文件位于其他目录中,可以提供绝对或相对路径。

我们举个实际的例子,假如有一个名为 tiap.txt 的文件,其内容为:

The Mystery of the Blue TrainThe Seven Dials MysteryThe Murder at the VicarageGiant"s BreadThe Floating AdmiralThe Sittaford MysteryPeril at End HouseLord Edgware Dies

删除第4行:

sed "4d" tiap.txt

上述命令将会删除 Giant"s Bread 这一行,如下为结果:

The Mystery of the Blue TrainThe Seven Dials MysteryThe Murder at the VicarageThe Floating AdmiralThe Sittaford MysteryPeril at End HouseLord Edgware Dies

接下来,我们删除第一行:

sed -i "1d" filename

注意:如果希望在不修改文件本身的情况下查看操作结果,请不要使用 -i 选项。

使用 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 -i "/^$/d" filename

关于 sed 命令,它的使用方法还有很多,大家有兴趣可以查看一下 man 手册。后续我们也会再单独介绍一下。

以上就是本次分享全部内容,欢迎讨论。

关键词: 删除文件 正则表达式 的情况下 介绍一下 练习的时候

相关新闻

Copyright 2015-2020   三好网  版权所有 联系邮箱:435 22 640@qq.com  备案号: 京ICP备2022022245号-21