2010-11-17 105 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