Linux中國

在 Linux 中如何刪除文件中的空行

有時你可能需要在 Linux 中刪除某個文件中的空行。如果是的,你可以使用下面方法中的其中一個。有很多方法可以做到,但我在這裡只是列舉一些簡單的方法。

你可能已經知道 grepawksed 命令是專門用來處理文本數據的工具。

如果你想了解更多關於這些命令的文章,請訪問這幾個 URL:在 Linux 中創建指定大小的文件的幾種方法在 Linux 中創建一個文件的幾種方法 以及 在 Linux 中刪除一個文件中的匹配的字元串

這些屬於高級命令,它們可用在大多數 shell 腳本中執行所需的操作。

下列 5 種方法可以做到。

  • sed:過濾和替換文本的流編輯器。
  • grep:輸出匹配到的行。
  • cat:合併文件並列印內容到標準輸出。
  • tr:替換或刪除字元。
  • awk:awk 工具用於執行 awk 語言編寫的程序,專門用於文本處理。
  • perl:Perl 是一種用於處理文本的編程語言。

我創建了一個 2daygeek.txt 文件來測試這些命令。下面是文件的內容。

$ cat 2daygeek.txt
2daygeek.com is a best Linux blog to learn Linux.

It's FIVE years old blog.

This website is maintained by Magesh M, it's licensed under CC BY-NC 4.0.

He got two GIRL babys.

Her names are Tanisha & Renusha.

現在一切就緒,我們準備開始用多種方法來驗證。

使用 sed 命令

sed 是一個 流編輯器 stream editor 。流編輯器是用來編輯輸入流(文件或管道)中的文本的。

$ sed '/^$/d' 2daygeek.txt
2daygeek.com is a best Linux blog to learn Linux.
It's FIVE years old blog.
This website is maintained by Magesh M, it's licensed under CC BY-NC 4.0.
He got two GIRL babes.
Her names are Tanisha & Renusha.

以下是命令展開的細節:

  • sed: 該命令本身。
  • //: 標記匹配範圍。
  • ^: 匹配字元串開頭。
  • $: 匹配字元串結尾。
  • d: 刪除匹配的字元串。
  • 2daygeek.txt: 源文件名。

使用 grep 命令

grep 可以通過正則表達式在文件中搜索。該表達式可以是一行或多行空行分割的字元,grep 會列印所有匹配的內容。

$ grep . 2daygeek.txt
or
$ grep -Ev "^$" 2daygeek.txt
or
$ grep -v -e '^$' 2daygeek.txt
2daygeek.com is a best Linux blog to learn Linux.
It's FIVE years old blog.
This website is maintained by Magesh M, it's licensed under CC BY-NC 4.0.
He got two GIRL babes.
Her names are Tanisha & Renusha.

以下是命令展開的細節:

  • grep: 該命令本身。
  • .: 替換任意字元。
  • ^: 匹配字元串開頭。
  • $: 匹配字元串結尾。
  • E: 使用擴展正則匹配模式。
  • e: 使用常規正則匹配模式。
  • v: 反向匹配。
  • 2daygeek.txt: 源文件名。

使用 awk 命令

awk 可以執行使用 awk 語言寫的腳本,大多是專用於處理文本的。awk 腳本是一系列 awk 命令和正則的組合。

$ awk NF 2daygeek.txt
or
$ awk '!/^$/' 2daygeek.txt
or
$ awk '/./' 2daygeek.txt
2daygeek.com is a best Linux blog to learn Linux.
It's FIVE years old blog.
This website is maintained by Magesh M, it's licensed under CC BY-NC 4.0.
He got two GIRL babes.
Her names are Tanisha & Renusha.

以下是命令展開的細節:

  • awk: 該命令本身。
  • //: 標記匹配範圍。
  • ^: 匹配字元串開頭。
  • $: 匹配字元串結尾。
  • .: 匹配任意字元。
  • !: 刪除匹配的字元串。
  • 2daygeek.txt: 源文件名。

使用 cat 和 tr 命令 組合

cat 串聯(拼接) concatenate 的簡寫。經常用於在 Linux 中讀取一個文件的內容。

cat 是在類 Unix 系統中使用頻率最高的命令之一。它提供了常用的三個處理文本文件的功能:顯示文件內容、將多個文件拼接成一個,以及創建一個新文件。

tr 可以將標準輸入中的字元轉換,壓縮或刪除,然後重定向到標準輸出。

$ cat 2daygeek.txt | tr -s 'n'
2daygeek.com is a best Linux blog to learn Linux.
It's FIVE years old blog.
This website is maintained by Magesh M, it's licensed under CC BY-NC 4.0.
He got two GIRL babes.
Her names are Tanisha & Renusha.

以下是命令展開的細節:

  • cat: cat 命令本身。
  • tr: tr 命令本身。
  • |: 管道符號。它可以將前面的命令的標準輸出作為下一個命令的標準輸入。
  • s: 替換標數據集中任意多個重複字元為一個。
  • n: 添加一個新的換行。
  • 2daygeek.txt: 源文件名。

使用 perl 命令

Perl 表示 實用的提取和報告語言 Practical Extraction and Reporting Language 。Perl 在初期被設計為一個專用於文本處理的編程語言,現在已擴展應用到 Linux 系統管理,網路編程和網站開發等多個領域。

$ perl -ne 'print if /S/' 2daygeek.txt
2daygeek.com is a best Linux blog to learn Linux.
It's FIVE years old blog.
This website is maintained by Magesh M, it's licensed under CC BY-NC 4.0.
He got two GIRL babes.
Her names are Tanisha & Renusha.

以下是命令展開的細節:

  • perl: perl 命令。
  • n: 逐行讀入數據。
  • e: 執行某個命令。
  • print: 列印信息。
  • if: if 條件分支。
  • //: 標記匹配範圍。
  • S: 匹配任意非空白字元。
  • 2daygeek.txt: 源文件名。

via: https://www.2daygeek.com/remove-delete-empty-lines-in-a-file-in-linux/

作者:Magesh Maruthamuthu 選題:lujun9972 譯者:pityonline 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國