如何删除文件末尾的换行符?

Modified on: Sat, 30 Jun 2018 06:18:00 +0800

让我清楚一下换行符:

$ echo Hello > file1 ; cat file1
Hello
$ echo -n  Hello > file2 ; cat file2
Hello$ 

在这里你可以看到file1在结尾有换行符,而file2却没有。

现在假设我有一个file

$ cat file
Hello
Welcome to
Unix
$

我想在文件末尾添加and Linux,然后echo " and Linux" >> file将添加到换行符。但我想要最后一行作为Unix and Linux

所以,为了解决这个问题,我想删除文件末尾的换行符。因此,如何删除文件末尾的换行符?

作者:,Pandya

最佳答案

如果您只想在最后一行添加文字,那么使用sed非常容易。将$(行尾的模式匹配)替换为您要添加的文本,仅在$范围内的行中(这意味着最后一行)。< / p>

sed '$ s/$/ and Linux/' <file >file.new &&
mv file.new file

在Linux上可以缩短为

sed -i '$ s/$/ and Linux/' file

如果要删除文件中的最后一个字节,Linux(更准确地说是GNU coreutils)提供truncate命令,这使得这很容易。

truncate -s -1 file

POSIX的方法是使用dd。首先确定文件长度,然后将其截断为少一个字节。

length=$(wc -c <file)
dd if=/dev/null of=file obs="$((length-1))" seek=1

请注意,这两个都无条件地截断文件的最后一个字节。您可能希望首先检查它是否为换行符:

length=$(wc -c <file)
if [ "$length" -ne 0 ] && [ -z "$(tail -c -1 <file)" ]; then
  # The file ends with a newline or null
  dd if=/dev/null of=file obs="$((length-1))" seek=1
fi

相关问答

添加新评论