Bash

如何從文本文件中刪除視覺上的空行?

  • November 8, 2022

我有一堆文本文件,其中一些包含空行,即僅包含換行符,或者可能的空格後跟換行符。我使用find命令定位文件。

  • 範例文件
#Title 1
12345678 1234

#Title 2
12345678 1234
12345678 1234
  • 預期產出
#Title 1
12345678 1234
#Title 2
12345678 1234
12345678 1234

我想刪除所有這些空行。我使用以下命令進行了嘗試:

cat "/path/to/file" | sed '/^\s*$/d' | sponge "/path/to/file";

例如,某些文件有 4 個或更多尾隨空行,但上述命令僅刪除了除一個尾隨空行之外的所有文件。

我怎樣才能刪除最後一個尾隨空行?如前所述:如果文件中還有任何空行,那麼這些也應該被刪除。

我試圖在文件之間獲得一些一致性,因為文件儲存在 BASH 變數中的排序數組中。然後循環文件並刪除所有空行和尾隨空行,而某些文件已經沒有空行或任何尾隨空行。

刪除空行或僅包含空格或製表符的可移植方法是

grep -v -x '[[:blank:]]*' file

這用於grep僅提取不匹配的行[[:blank:]]*。該[[:blank:]]*模式匹配零個或多個空格或製表符。如果要匹配更大的類似空格的字元集,請[[:space:]]*改用。強制模式匹配完整行的-x選項grep(就像您使用^and錨定了表達式一樣$)。

如果您的實用程序不理解類似 Perl 的正則表達式,則 該\s模式匹配該字元。例如,在 macOS 上**就是這種情況。**如果在 macOS 上使用,您的命令將刪除任何包含零個或多個字元的行。這包括空行,但不包括僅包含空格或製表符的行。ssed**sed``s

引用自:https://unix.stackexchange.com/questions/724006