1)从文件中删除最后一个空行:
首先,您当前使用的命令将删除所有空行和空行!
不只是最后一个。
如果要删除最后一行为空/空白的行,则可以使用以下命令:
sed '${/^[[:blank:]]*$/d}' test
INPUT:
cat -vTE test
a$
$
b$
$
c$
^I ^I $
OUTPUT:
sed '${/^[[:blank:]]*$/d}' test
a
b
c
说明:
第一个$将告诉sed仅在最后一行进行处理
/^[[:blank:]]*$/条件将由sed计算,如果此行为空或仅由空白字符组成,它将触发模式缓冲区上的删除操作,因此将不打印最后一行
您可以重定向sed命令的输出以将其保存到新文件,或使用-i选项( 如果使用它,则需要备份文件!!!! )或使用-i.bak强制sed在修改文件之前先对其进行备份。
重要:
如果您的文件来自Windows,并且包含一些回车符( \\r ),则此sed命令将不起作用! 您将需要使用dos2unix或tr -d '\\r'删除那些嘈杂的字符。
对于包含回车符的文件 ( \\r或^M ):
修复文件之前:
猫:
cat -vTE test
a$
$
b$
$
c$
^I ^I ^M$
OD:
od -c test
0000000 a \n \n b \n \n c \n \t \t \r \n
0000016
SED:
sed '${/^[[:blank:]]*$/d}' test
a
b
c
修复文件后:
dos2unix test
dos2unix: converting file test to Unix format ...
猫:
cat -vTE test
a$
$
b$
$
c$
^I ^I $
OD:
od -c test
0000000 a \n \n b \n \n c \n \t \t \n
0000015
SED:
sed '${/^[[:blank:]]*$/d}' test
a
b
c
2)从文件中删除最后的终止字符:
为此,我建议使用perl :
perl -pe 'chomp if eof' test
a
b
c
您可以将-i选项添加到in-place更改in-place (在运行命令之前对文件进行备份)。 最后但并非最不重要的一点是,您可能必须按照上述说明从文件中删除回车符。