Scripting
如何從文件中刪除多個空行?
我有一些用於記筆記的文本文件 - 只是純文字,通常只使用
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
將多個空行實例折疊為一個空行,但如果它們相同且位於彼此下方,它也會折疊包含文本的行。