linux中刪除文件內空白行的幾種方法 有時你可能需要在 Linux 中刪除某個文件中的空行。如果是的,你可以使用下麵方法中的其中一個。有很多方法可以做到,但我在這裡只是列舉一些簡單的方法。 你可能已經知道 grep、awk 和 sed 命令是專門用來處理文本數據的工具。 下列 5 種方法可以做到。 ...
linux中刪除文件內空白行的幾種方法
有時你可能需要在 Linux 中刪除某個文件中的空行。如果是的,你可以使用下麵方法中的其中一個。有很多方法可以做到,但我在這裡只是列舉一些簡單的方法。
你可能已經知道 grep、awk 和 sed 命令是專門用來處理文本數據的工具。
下列 5 種方法可以做到。
◈ sed:過濾和替換文本的流編輯器。
◈ grep:輸出匹配到的行。
◈ cat:合併文件並列印內容到標準輸出。
◈ tr:替換或刪除字元。
◈ awk:awk 工具用於執行 awk 語言編寫的程式,專門用於文本處理。
◈ perl:Perl 是一種用於處理文本的編程語言。
我創建了一個 2daygeek.txt
文件來測試這些命令。下麵是文件的內容。
1 yck@yck-virtual-machine:~$ cat 2dayweek.txt 2 hello world! 3 4 can you tell me yout name?
現在一切就緒,我們準備開始用多種方法來驗證。
使用 sed 命令
sed 是一個流編輯器stream editor。流編輯器是用來編輯輸入流(文件或管道)中的文本的。
1 yck@yck-virtual-machine:~$ sed '/^$/d' 2dayweek.txt 2 hello world! 3 can you tell me yout name?
以下是命令展開的細節:
◈ sed: 該命令本身。
◈ //
: 標記匹配範圍。
◈ ^
: 匹配字元串開頭。
◈ $
: 匹配字元串結尾。
◈ d
: 刪除匹配的字元串。
◈ 2daygeek.txt
: 源文件名。
使用 grep 命令
grep 可以通過正則表達式在文件中搜索。該表達式可以是一行或多行空行分割的字元,grep 會列印所有匹配的內容。
1 yck@yck-virtual-machine:~$ grep -v "^$" 2dayweek.txt 2 hello world! 3 can you tell me yout name?
以下是命令展開的細節:
◈ grep: 該命令本身。
◈ .
: 替換任意字元。
◈ ^
: 匹配字元串開頭。
◈ $
: 匹配字元串結尾。
◈ E
: 使用擴展正則匹配模式。
◈ e
: 使用常規正則匹配模式。
◈ v
: 反向匹配。
◈ 2daygeek.txt
: 源文件名。
使用 awk 命令
awk 可以執行使用 awk 語言寫的腳本,大多是專用於處理文本的。awk 腳本是一系列 awk 命令和正則的組合。
1 yck@yck-virtual-machine:~$ awk '!/^$/' 2dayweek.txt 2 hello world! 3 can you tell me yout name?
以下是命令展開的細節:
◈ awk: 該命令本身。
◈ //
: 標記匹配範圍。
◈ ^
: 匹配字元串開頭。
◈ $
: 匹配字元串結尾。
◈ .
: 匹配任意字元。
◈ !
: 刪除匹配的字元串。
◈ 2daygeek.txt
: 源文件名。
使用 cat 和 tr 命令 組合
cat 是串聯(拼接)concatenate的簡寫。經常用於在 Linux 中讀取一個文件的內容。
cat 是在類 Unix 系統中使用頻率最高的命令之一。它提供了常用的三個處理文本文件的功能:顯示文件內容、將多個文件拼接成一個,以及創建一個新文件。
tr 可以將標準輸入中的字元轉換,壓縮或刪除,然後重定向到標準輸出。
1 yck@yck-virtual-machine:~$ cat 2dayweek.txt |tr -s '\n' 2 hello world! 3 can you tell me yout name?
以下是命令展開的細節:
◈ cat: cat 命令本身。
◈ tr: tr 命令本身。
◈ |
: 管道符號。它可以將前面的命令的標準輸出作為下一個命令的標準輸入。
◈ s
: 替換標數據集中任意多個重覆字元為一個。
◈ \n
: 添加一個新的換行。◈ 2daygeek.txt
: 源文件名。
使用 perl 命令
Perl 表示實用的提取和報告語言Practical Extraction and Reporting Language。Perl 在初期被設計為一個專用於文本處理的編程語言,現在已擴展應用到 Linux 系統管理,網路編程和網站開發等多個領域。
1 yck@yck-virtual-machine:~$ perl -ne 'print if /\S/' 2dayweek.txt 2 hello world! 3 can you tell me yout name?
以下是命令展開的細節:
◈ perl: perl 命令。
◈ n
: 逐行讀入數據。
◈ e
: 執行某個命令。
◈ print
: 列印信息。
◈ if
: if 條件分支。
◈ //
: 標記匹配範圍。
◈ \S
: 匹配任意非空白字元。
◈ 2daygeek.txt
: 源文件名。