如何\n
从文件中删除最后一个。该文件在最后一个文本行中为换行符创建了最后一个空白行。我正在使用这个命令:
sed '/^\s*$/d'
但是没有删除 las 空白行。
如何\n
从文件中删除最后一个。该文件在最后一个文本行中为换行符创建了最后一个空白行。我正在使用这个命令:
sed '/^\s*$/d'
但是没有删除 las 空白行。
为什么要sed
打印换行符?
当您阅读sed
POSIX 标准时,它会声明:
每当将模式空间写入标准输出或命名文件时,
sed
应立即使用<newline>
.
可以在此答案中找到更多详细信息。
删除最后一个<newline>
:
truncate
:如果您只想从文件中删除一个字符,您可以这样做:
truncate -s -1 <file>
这使文件缩短一个字节,即删除最后一个字符。
From
man resize
: 按字节-s, --size=SIZE
设置或调整文件大小SIZE
SIZE
也可以由以下修饰字符之一作为前缀:'+
' 扩展,'-
'减少,'<
'至多,'>
'至少,'/
'向下舍入为倍数,'%
'向上舍入为倍数。
其他答案可以在如何删除换行符如果它是文件中的最后一个字符?
1)从文件中删除最后一个空行:
首先,您当前使用的命令将删除所有空行和空白行!
不仅是最后一个。
如果你想删除最后一行,如果它是空的,那么你可以使用以下命令:
sed '${/^[[:blank:]]*$/d}' test
输入:
cat -vTE test
a$
$
b$
$
c$
^I ^I $
输出:
sed '${/^[[:blank:]]*$/d}' test
a
b
c
说明:
$
会告诉sed
只在最后一行进行处理/^[[:blank:]]*$/
条件将由 sed 评估,如果此行为空或仅由空白字符组成,它将触发模式缓冲区上的删除操作,因此不会打印最后一行-i
您可以重定向 sed 命令的输出以将其保存到新文件或使用选项就地进行更改(如果您使用它,请备份您的文件!!!!)或使用-i.bak
强制sed
返回在修改它之前,你的文件。重要的:
如果您的文件来自 Windows 并包含一些回车符 ( \r
),则此sed
命令将不起作用!!!您将需要使用dos2unix
或删除那些嘈杂的字符tr -d '\r'
。
对于包含回车符<CR>
(\r
或^M
)的文件:
在修复文件之前:
猫:
cat -vTE test
a$
$
b$
$
c$
^I ^I ^M$
外径:
od -c test
0000000 a \n \n b \n \n c \n \t \t \r \n
0000016
赛德:
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 -c test
0000000 a \n \n b \n \n c \n \t \t \n
0000015
赛德:
sed '${/^[[:blank:]]*$/d}' test
a
b
c
2) 从文件中删除最后一个 EOL 字符:
出于这个特殊目的,我建议使用perl
:
perl -pe 'chomp if eof' test
a
b
c
您可以-i
为更改添加选项in-place
(在运行命令之前备份文件)。最后但并非最不重要的一点是,您可能必须按照此处所述从文件中删除回车。
您还可以使用下面的单行sed
来删除尾随的空白行:
sed -e :a -e '/^\n*$/N;/\n$/ba'
您的问题不清楚,但这可能是您要求的:
$ cat file
a
b
c
$ awk 'NR>1{print p} {p=$0}' file
a
b
c
$