Scripting

如何從文件中刪除多個空行?

  • April 17, 2020

我有一些用於記筆記的文本文件 - 只是純文字,通常只使用cat >> file. 有時我會使用一兩行空行(只需返回 - 換行符)來指定新的主題/構想。在每個會話結束時,在使用Ctrl+關閉文件之前D,我通常會添加很多 (5-10) 個空白行(輸入鍵)來分隔會話。

這顯然不是很聰明,但它對我有用。*然而,*我最終得到了很多不必要的空白行,所以我正在尋找一種方法來刪除(大部分)多餘的行。是否有可以直接與幾個選項一起使用的 Linux 命令(剪切、粘貼、grep、…?)?或者,是否有人對 sed、awk 或 perl(實際上在任何腳本語言中,儘管我更喜歡 sed 或 awk)腳本有我想要的想法?用 C++ 編寫一些東西(我實際上可以自己做),似乎有點矯枉過正。

案例#1:我需要的是一個腳本/命令,它將刪除兩個以上(3 個或更多)連續的空行,並用兩個空行替換它們。儘管如果它也可以被調整以刪除多於一行(2 行或更多行)和/或僅用一個空行替換多個空行,那就太好了。

案例#2:我也可以使用腳本/命令來刪除兩行文本之間的一個空行,但保留多個空行(儘管刪除一個空行也是可以接受的)。

情況1:

awk '!NF {if (++n <= 2) print; next}; {n=0;print}'

案例二:

awk '!NF {s = s $0 "\n"; n++; next}
    {if (n>1) printf "%s", s; n=0; s=""; print}
    END {if (n>1) printf "%s", s}'

您可以使用uniq將多個空行實例折疊為一個空行,但如果它們相同且位於彼此下方,它也會折疊包含文本的行。

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