服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 在 Linux 命令行中删除文件中的某一行

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

2022-11-08 17:50TIAP刘光录 Linux

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

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

我们大家都知道,在 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 Train
The Seven Dials Mystery
The Murder at the Vicarage
Giant's Bread The Floating Admiral The Sittaford Mystery Peril at End House Lord Edgware Dies

删除第4行:

sed '4d' tiap.txt

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

The Mystery of the Blue Train
The Seven Dials Mystery
The Murder at the Vicarage
The Floating Admiral
The Sittaford Mystery
Peril at End House
Lord 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 手册。后续我们也会再单独介绍一下。

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

原文地址:https://mp.weixin.qq.com/s?__biz=MzI0OTQyNjU5Mw==&mid=2247484732&idx=1&sn=1c730d380058e7b087c1911d029f8fd2&chksm=e990e2f2dee76be4a2ef571c65c5aa68b699a98a0bbdb2baadaa24a911e5d1e08f78b762d603&scene=178&cur_album_id=1894932981526380552#rd

延伸 · 阅读

精彩推荐
  • LinuxLinux知识点小结

    Linux知识点小结

    这篇文章主要为大家分享了Linux知识点,帮助大家更加详细的学习Linux...

    Linux教程网11472021-11-01
  • Linux通过Linux命令查看系统平均负载的方法

    通过Linux命令查看系统平均负载的方法

    这篇文章主要介绍了通过Linux命令查看系统平均负载的方法,对于服务器管理员来说非常有用,需要的朋友可以参考下...

    Linux之家3662019-09-10
  • Linux学习Vim合并行的方法和技巧

    学习Vim合并行的方法和技巧

    这篇文章主要介绍了学习Vim合并行的方法以及代码实现过程,值得参考,一起来学习下。...

    wubaiqing4072022-02-22
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye8972021-12-16
  • LinuxLinux极客的56个技巧

    Linux极客的56个技巧

    是什么区分开普通的Linux用户和超级极客的呢?很简单:用在学习那些使长时工作转变为一瞬间工作的技巧、诀窍、秘诀和技术上的时间。如果你想提高效...

    Linux教程网5452019-11-21
  • LinuxLinux系统下使用rpm方式安装最新mysql5.7.17完整步骤

    Linux系统下使用rpm方式安装最新mysql5.7.17完整步骤

    这篇文章主要介绍了Linux系统下使用rpm方式安装最新mysql5.7.17完整步骤,需要的朋友可以参考下...

    馬輝535415012021-12-24
  • LinuxLinux 性能优化的全景指南,可能都在这里了

    Linux 性能优化的全景指南,可能都在这里了

    性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快,无法支撑更多的请求。性能分析实际上就是找出应用或系统的瓶颈,设法去避免或缓...

    高效运维10692022-03-02
  • Linuxredhat linux 安装 gcc编译器

    redhat linux 安装 gcc编译器

    分两种情况: 先看这篇转过来的文章,俺老孙懒得写了。 Linux软件安装通用思路 在Linux系统中,软件安装程序比较纷繁复杂,不过最常见的有两种: 1)一种...

    Linux教程网4582020-04-12