Bash
如何從文本文件中刪除視覺上的空行?
我有一堆文本文件,其中一些包含空行,即僅包含換行符,或者可能的空格後跟換行符。我使用
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 上使用,您的命令將刪除任何包含零個或多個字元的行。這包括空行,但不包括僅包含空格或製表符的行。s
sed
**sed``s