2010-12-15 271 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'