添加额外的行很简单,因为我可以使用echo "line" >> file
,但是如果我想在文件中的最后一个字符后面添加一个字符串而不开始新行怎么办?有哪些好的方法可以做到这一点?
答案1
格式良好的 unix 文本文件必须文件末尾有一个尾随换行符。为了实现你想要的,必须放置字符串前那现存的尾随换行符。
考虑这个测试文件:
$ cat File
1
2
3
现在,让我们在最后一行添加单词前最后一个换行符:
$ sed '$s/$/new words/' File
1
2
3new words
或者,如果您想就地编辑文件,请使用以下-i
选项:
sed -i.bak '$s/$/new words/' File
怎么运行的:
$
第一个
$
告诉 sed 仅执行文件最后一行后面的命令。s/$/new words/
对于文件中的最后一行,这位于
new words
该行的末尾,但是前最后的换行符。在替代命令中,
$
表示行尾。
答案2
为了避免重写整个文件,您可以查找文件末尾,备份一个字符并写入。
使用常规 Unix shell 工具执行此操作有点不确定。
然而,Perl 可以做一切事情。您还可以使用 Ruby 或 Python 或任何其他全功能脚本语言。
Perl 示例:
#!/usr/bin/env perl
use strict;
use Fcntl qw(:seek);
open(F, '+<', 'testfile') or die "$!";
seek(F, -1, SEEK_END) or die "$!";
print F "new data\n";
close(F) or die "$!";