Sed 删除最后一个空行

Sed 删除最后一个空行,sed,awk,grep,Sed,Awk,Grep,在我的.csv文件末尾有一个段落分隔符。我试图用下面的命令删除文件末尾的空白行。 sed -i '/^$/d' combined.csv sed -i '$d' combined.csv 但它不起作用,仍然有一个空行。我可以使用以下命令删除最后一行 sed -i '/^$/d' combined.csv sed -i '$d' combined.csv 但是,在删除前是否可以检查最后一行是否真的为空 更新: 我使用以下命令检查每一行是否以数字开头 sed -i '1s/^[^0-9]*/

在我的.csv文件末尾有一个段落分隔符。我试图用下面的命令删除文件末尾的空白行。
sed -i '/^$/d' combined.csv
sed -i '$d' combined.csv
但它不起作用,仍然有一个空行。我可以使用以下命令删除最后一行

sed -i '/^$/d' combined.csv
sed -i '$d' combined.csv
但是,在删除前是否可以检查最后一行是否真的为空

更新:

我使用以下命令检查每一行是否以数字开头

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

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

请尝试
${/^$/d;}
这将只匹配文件最后一行的空行


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

在很久以前的某个地方找到并保存了该片段。不要问我它是如何工作的:

perl -i -pe "chomp if eof" combined.csv
请尝试${/^$/d;}这将只匹配文件最后一行的空行

我使用sed(GNU-sed)4.2.2进行了尝试,删除了所有的空行,如果空行是文件的最后一行,则不仅删除了空行

我找到了下面的命令,这对我自己来说是有效的

sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'
此命令来自有用的SED oneliner集合:

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

它将删除文件中的任何空行。我希望你的文件中间没有空行,但在你的情况下会这样。

cat combined.csv|grep.


cat combined.csv | sed'/^$/d'
如果您确信最后一行是空的,那么只需使用:
..head-n-1 |

如果EOF(\n\n)没有空行,这也会删除EOF的最后一行\n-这在Unix中不应该删除。@AleksandrLevchuk:,但这很容易解决:
perl-pe'chomp if eof&&/^$/'combined.csv
谢谢,这很有效!您能详细介绍一下第一个sed命令吗?
${/^$/d;}
:第一个
$
表示文件的最后一行(您可以将命令限制为行号,$表示最后一行)。大括号表示块,在块中删除
/d空行
/^$
${/^$/d;}
应该可以正常工作,与任何POSIX兼容的
sed
。尝试
sed'${/^$/d;}您的替代方法会做一些不同的事情:它会修剪所有额外的尾随换行符,而不仅仅是最后一行,而且它还会一次读取整个文件,这在本例中是不必要的,并且会对大文件产生问题。是的,但是。。。UOOC!