如何使用sed从文件中删除特定行

在某些情况下,我们需要从一个或多个文件中删除特定的一行,例如,发生在我身上的是一个完整的文件列表,我需要删除所有这些中的第27行(第27行是ACL的行) ,规范,规则,配置),或者我可以逐个文件地编辑文件,或者可以使用命令来实现所需的功能 口渴 和bash脚本(可选)。

但是,让我们尝试一个简单的文件。

我们有文件 发行版-deb.txt 其中包含:

Debian的

库本图

ArchLinux的

溶质

薄荷

换句话说,文件 发行版-deb.txt 我们将在其中放置基于Debian的发行版,但在第3行中看到“ archlinux”,该发行版显然与Debian无关,因此我们必须删除该行。 为了消除该文件的第3行,我们将放置以下内容:

sed "3d" distros-deb.txt > distros-deb-ok.txt

解释这条线有些容易, 渴“ 3d” 我们表示我们将删除第3行, 发行版-deb.txt 我们指示要处理的文件,即删除该文件的第3行,如果按Enter键,则显示到此处,它将在终端中显示我们想要的内容,因此 > distros-deb-ok.txt 我们指出,它不是将结果显示在终端中,而是将其放入具有此名称的文件中。

有什么简单的?

另外,我们可以避免使用 > distros-deb-ok.txt 使用适当的参数 口渴,参数 -i

也就是说,如果我们要从文件中删除该行并以相同的名称保存(而不是在另一个文件中),只需添加参数 -i :

sed -i "3d" distros-deb.txt

这将从distros-deb.txt中删除第3行并保存。

如果我想要一系列的行,那就是删除第3行,同时删除#4和#5,该怎么办? 为此,我们将范围设置为3到5,即:

sed -i "3,5d" distros-deb.txt

而且只会显示debian和kubuntu😀

那么,如果我不知道总行数又想从第2行删除到最后一行怎么办?

只需使用美元符号-»$

sed -i "2,$d" distros-deb.txt

如果您想从第一行中消除到#4,那么我们只需将值1放在开头:

sed -i "1,4d" distros-deb.txt

这就是一切,这是一个非常有用的技巧,当您要制作bash脚本以使任务自动化并且需要修改和消除配置文件行时,我们可以使用 口渴 o perl的,以及消除方法,我们已经知道如何使用sed😉

问候


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   mss开发

    很好的贡献😉

    1.    KZKG ^ Gaara

      谢谢

      顺便说一句,我们现在已经收到您的电子邮件,我会答复您😀

      问候

  2.   无名

    作为终端,服务器和ssh连接的大祭司,我来找你,哦,伟大的KZKG ^ Gaara,我问你:我在哪里可以得到我的无知水平的教程,使我可以使用不同网络中两个远程计算机之间的ssh连接来共享文本文件,pdf,图像和声音(mp3)…。

    🙂

    认真地说,您可以在这方面指导我吗,我有两台机器,一台在工作,一台在家里,我需要它们之间的ssh连接(因为据我所知,ssh允许在机器之间共享内容,对吗?)。
    如果我错了,您推荐什么应用程序?
    在这方面,我在哪里可以找到基本教程?

    1.    -间谍-

      scp。

      scp用户@机器地址:路径用户@机器地址:路径。

      与cp相同的语法,源->目标。

  3.   F3NIX

    你出现了,你迷路了。

  4.   华金

    好提示!

  5.   LycusHacker 情绪

    有趣的提示…xD

    您是否偶然知道一种使粗体文字脱颖而出的方法?
    我的意思是,我有一个作为字典的txt文件,它有10000多行,并且我希望它在“:”悬挂点之前突出显示某些文本,并且一个接一个地做太多。

    1.    KZKG ^ Gaara

      你好,

      txt文件是纯文本,顾名思义...纯文本,没有格式或类似内容,很抱歉,但是我认为您的要求无法解决,可以吗? 🙁

      问候

      1.    ACA

        确实可以,但是您必须知道目标格式。
        例如:
        echo $(echo“ Robert:Hello。Change here” | sed的/ \ ./。\\ e [40; 31m /; s / \:/:\\ e [40; 35m /')
        这是应对的问题。
        可以使用的另一种删除方法是sed'/'$ 1'/ d',但是您必须确保正确。

        1.    LycusHacker 情绪

          然后将其保存到* .odt中

          使用LibreOffice难道没有更简单的方法吗?

  6.   洛洛

    您可以删除一行的一部分,其余部分保留吗?

    假设我要删除某行中某个单词前面的所有内容。

    或删除该词后的所有内容。

    1.    ACA

      是的,这是拉正则表达式的问题(如有必要,请使用man sed -r,–regexp-extended)
      从我发现的开始
      回声«罗伯特:你好。 更改此处»| sed's / Change //'
      与定义良好的模式和。 (一个字符)和*(一个以上)
      则:
      回声«罗伯特:你好。 更改此处»| sed's / Change。* //'
      之前:
      回声«罗伯特:你好。 在此处更改»| sed的/。*更改//'
      如果重要的是出现这个词
      回声«罗伯特:你好。 更改此处»| sed的/更改* /更改/'
      或更详细
      在包含Robert的行中Change之后会发生什么
      echo -e«弗里兹:你好。 更改此处\ nRobert:您好。 更改此处»| sed'/Robert/s/Cambio.*//'
      或像在开始时那样走第二行并处理其余部分
      echo -e«弗里兹:你好。 更改此处\ nRobert:您好。 更改此处\ n其他»| sed -e 2d -e's / Change。* //'
      echo -e«弗里兹:你好。 更改此处\ nRobert:您好。 更改此处\ n其他»| sed'2d; s / Change。* //'

      1.    洛洛

        谢谢,这对我非常有用。

  7.   MSX

    不错的文章,我喜欢的文章,SysAdmin非常好!
    如果没有sed,awek,perl,grep,tail,head,“ Emacs”和许多其他必备工具,我们的生活将会怎样!

  8.   丽丝贝丝·奥尔拉维斯

    谢谢,这非常有帮助。

  9.   佩尔尼

    您好,如何用同一命令从文件第1,4和10行删除文件?