2010-12-15 198 views
7

我的.csv文件末尾有一个para中断。我尝试使用以下命令删除文件结尾处的空行。删除最后一个空白行

sed -i '/^$/d' combined.csv 

但它不起作用,空白行仍然存在。我可以使用以下命令删除最后一行。

sed -i '$d' combined.csv 

但是有可能在删除它之前检查最后一行是否真的是空的?

更新:

我使用下面的命令来检查每一行以数字开头。

sed -i '1s/^[^0-9]*//' combined.csv 

这仅检查第一行而不检查其余行。我如何使它检查文件中的所有行?这可能会解决我的问题。

回答

17

尝试${/^$/d;}如果它是文件的最后一行,它将只匹配空行。

更新:关于第二个问题,只是在S之前删除1,即:sed -i 's/^[^0-9]*//' combined.csv

+0

谢谢,这个作品!你能详细说明第一个sed命令吗? – dangonfast 2014-09-01 13:04:26

5

发现这个很久以前的地方,并节省了片段。不要问我它的工作原理:

perl -i -pe "chomp if eof" combined.csv 
+2

如果在EOF处没有空行(\ n \ n),这也将删除EOF中的最后一个\ n,这在Unix中不应该被删除。 – 2012-02-13 22:44:51

+0

@AleksandrLevchuk:好点,但这很容易修复:'perl -pe'chomp if eof &&/^ $ /'combined.csv' – mklement0 2017-01-22 21:49:51

0

尝试$ {/^$/d;}这如果是文件的最后一行将只匹配一个空行。

我尝试了与的sed(GNU SED)4.2.2并得到了所有空行删除,不仅空行,如果它是文件的最后一行。

我发现了下面的命令,它为我自己做了工作。

sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' 

这个命令是有用的SED-Oneliners的集合: http://sed.sourceforge.net/sed1line.txt

+0

'$ {/^$/d;}'应该可以正常工作,任何POSIX兼容'sed'。试试'sed'$ {/^$/d;}'<<< $'a \ n \ nb \ n'',你会看到只有最后一行被删除。 – mklement0 2017-01-22 21:18:07

+0

你的选择做了一些不同的事情:它修剪所有附加的换行符,而不仅仅是最后一行,它还读取整个文件_at once_,在这种情况下这是不必要的,并且对于大文件有问题。 – mklement0 2017-01-22 21:39:03

0

要删除空行,你可以使用grep .sed '/^$/d'

它将删除空行的文件中。我希望你的文件在中间没有任何空行,但是这对你的情况起作用。

cat combined.csv | grep .

cat combined.csv | sed '/^$/d'