如何从文件中删除最后一个\n
。该文件为最后一个文本行中的换行符创建了最后一个空行。我正在使用这个命令:
sed '/^\s*$/d'
但是不会删除那个拉米空白行。
答案 0 :(得分:2)
为什么sed
会打印换行符?
当您阅读sed
POSIX standard时,它会说明:
每当模式空间被写入标准输出或命名文件时,
sed
将立即跟随<newline>
。
可以在this answer中找到更多详细信息。
删除最后一个<newline>
:
truncate
:如果您只想从文件中删除一个字符,则可以执行以下操作:
truncate -s -1 <file>
这使文件缩短一个字节,即删除最后一个字符。
来自
man resize
:-s, --size=SIZE
设置或调整文件大小SIZE
字节
SIZE
也可以使用以下修改字符之一作为前缀: &#39;+
&#39;延伸,&#39;-
&#39;减少,&#39;<
&#39;至多,&#39;>
&#39;至少, &#39;/
&#39;向下舍入到多个,%
&#39;四舍五入到。
其他答案可在How can I delete a newline if it is the last character in a file?
答案 1 :(得分:1)
1)从文件中删除最后一个空行:
首先,您当前使用的命令将删除 所有 空行和空白行!
不仅仅是最后一个。
如果要删除最后一行(如果它为空/空白),则可以使用以下命令:
sed '${/^[[:blank:]]*$/d}' test
<强> INPUT:强>
cat -vTE test
a$
$
b$
$
c$
^I ^I $
<强>输出:强>
sed '${/^[[:blank:]]*$/d}' test
a
b
c
<强>说明:强>
$
会告诉sed
仅在最后一行进行处理/^[[:blank:]]*$/
条件将由sed评估,如果此行为空或仅由空白字符组成,则会触发对模式缓冲区的删除操作,因此不会打印最后一行-i
选项进行就地更改(如果您使用它,请备份您的文件!! !! )或使用-i.bak
强制sed
在修改文件之前备份文件。重要:强>
如果您的文件来自Windows并包含一些回车符(\r
),则此sed
命令将无效!您需要使用dos2unix
或tr -d '\r'
删除这些嘈杂的字符。
对于包含回车<CR>
(\r
或^M
)的文件:
在修复文件之前:
cat:
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
(在运行命令之前备份您的文件)。最后但同样重要的是,您可能必须从文件中删除回车符,如下所述。
答案 2 :(得分:1)
您的问题并不清楚,但这可能是您要求的:
$ cat file
a
b
c
$ awk 'NR>1{print p} {p=$0}' file
a
b
c
$
答案 3 :(得分:1)
您还可以使用sed
下面的单行内容删除尾随空白行:
sed -e :a -e '/^\n*$/N;/\n$/ba'