2010-11-17 189 views
3

嘿大家。 我有一個文件充滿了數據,每行包含類似於「755545; 45634; 1244」的東西。有時在某處可能會出現未知數量的額外新行,這是我不想要的。 實施例:使用awk/sed刪除雙行新行

256163;16816;1651 
16156;165165;1165 

15153;135135;15351 
15153;1351;8 



165;15313;153513 
254;45;45 

希望的輸出:

256163;16816;1651 
16156;165165;1165  
15153;135135;15351 
15153;1351;8 
165;15313;153513 
254;45;45 

這能容易地與AWK/SED效用在UNIX中做了什麼?

回答

9

從@Luixv答案是正確的,如果有對 「空」 行沒有空格。 如果空白是目前使用這個代替:

sed '/^[ \t]*$/d' 

多數民衆贊成在括號內的\ T,即[空格\ T]

之前的空間。如果這不起作用,你可能有一個問題換行。做一個:

$ file test_file 
test_file: ISO-8859 text, with CRLF, LF line terminators 

如果得到上面的輸出,它使用的文件轉換爲UNIX:如果你沒有安裝它,安裝它

$ dos2unix test_file 
+0

是是是!大!究竟。之後充分工作,謝謝! – tsusanka 2010-11-17 11:54:19

+0

如果您使用來自Windows的文件,請注意。如果是這樣,您可能需要匹配^ M(多餘的窗口結束符)以及空格和製表符。 – qwerty9967 2012-07-01 02:07:18

6

的sed '/^$/d'

+0

THX答覆。我試過,但它似乎增加了一個額外的新行,而不是刪除它們.. – tsusanka 2010-11-17 10:49:06

+0

好吧,我現在正在嘗試它,它的工作原理。那麼我所假設的是,你沒有空行,但其他東西(可能是標籤,空格?)。對一個小測試文件並嘗試它。 – Luixv 2010-11-17 10:56:24

+0

嗯,這很有趣。我試着用我的例子和它的工作。但我在主文件上應用它看起來不起作用。這可能是由於文件大小(純文本大約250Mb!)。 – tsusanka 2010-11-17 11:01:24

1
sed -nre "s/([^$])/\1/p" input 
0

ssed解決super_sed。

ssed -R -e '/(^$|\s)/ d' yourFile 

cat yourFile| ssed -R -e '/(^$|\s)/ d' 

快樂seding

PS:如果你有標籤或\r \t \n因此在ReqExp的\s甚至會工作。

\r = Return Carriage 
\n = New Line 
\t = Tab 
1
sed -n 's/^[ ,\t]*$/!p' filename 
+0

由於unix考慮空間和製表符爲不同的字符,我提出了兩個問題我們應該提及 – Sabarish 2012-09-26 13:14:30

+0

(修正了製表符轉義,轉義使用了後退,這裏的前進空間可能不是我想要的,我猜這是一個錯字。 – Evi1M4chine 2016-01-06 19:20:33