如何从文件中删除最后一个\n
。该文件具有为最后一个文本行中的换行符创建的最后一个空白行。我使用这个命令:
sed '/^\s*$/d'
但是las的空行并没有被删除。
发布于 2018-05-28 13:46:28
1)从文件中删除最后一个空行:
首先,您当前使用的命令将删除所有的空行和空行!
不仅仅是最后一个。
如果你想删除最后一行,如果它是空的,那么你可以使用下面的命令:
sed '${/^[[:blank:]]*$/d}' test
输入:
cat -vTE test
a$
$
b$
$
c$
^I ^I $
输出:
sed '${/^[[:blank:]]*$/d}' test
a
b
c
Explanations:
第一个line
/^[[:blank:]]*$/
将告诉sed
仅在最后一行上执行处理。条件将由sed求值,如果此行为空或仅由空白字符组成,则它将触发对模式缓冲区的删除操作,因此,最后一行将不会打印出来。您可以重定向sed命令的输出以将其保存到新文件中,或者使用-i
选项就地进行更改(如果使用选项,请备份文件!),或者使用-i.bak
强制sed
在修改文件之前对文件进行备份。重要信息:
如果您的文件来自Windows并且包含一些回车符(\r
),则此sed
命令将不起作用!您需要使用dos2unix
或tr -d '\r'
删除这些嘈杂的字符。
对于包含回车符<CR>
(\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)删除文件中的最后一个EOL字符:
对于这个特殊目的,我建议使用perl
perl -pe 'chomp if eof' test
a
b
c
您可以将-i
选项添加到change in-place
(在运行该命令之前备份文件)。最后但并非最不重要的一点是,您可能必须从您的文件中删除回车,如下所述。
发布于 2018-05-28 22:18:01
你的问题不清楚,但这可能是你想要的:
$ cat file
a
b
c
$ awk 'NR>1{print p} {p=$0}' file
a
b
c
$
发布于 2018-05-29 01:26:46
您还可以使用sed
中的以下一行代码删除尾随空行:
sed -e :a -e '/^\n*$/N;/\n$/ba'
https://stackoverflow.com/questions/50559170
复制相似问题