如何使用sed從文件中刪除特定行

在某些情況下,我們需要從一個或多個文件中刪除特定的一行,例如,發生在我身上的是完整的文件列表,我需要刪除所有這些中的第27行(第27行是ACL,規範,規則,配置),我可以逐個文件地編輯文件,也可以使用以下命令實現所需的功能 口渴 和bash腳本(可選)。

但是,讓我們嘗試一個簡單的文件。

我們有文件 發行版-deb.txt 其中包含:

Debian的

Kubuntu的

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😀

如果我不知道總行數,又想從第二行刪除到最後一行怎麼辦?

只需使用美元符號-»$

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

如果您想從第一行中消除到#4,那麼我們只需將值1放在開頭:

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

這就是一切,這是一個非常有用的技巧,當您要製作bash腳本以使任務自動化並且需要修改和消除配置文件行時,可以使用 口渴 o perl的,以及消除方法,我們已經知道如何使用sed😉

問候


16條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  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 他說:

      HOLA,

      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.   麗絲貝絲·奧爾拉維斯(Lisbeth Ollarves) 他說:

    謝謝,這非常有幫助。

  9.   佩爾尼 他說:

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