在 Bash 中,怎样才能tail
将文本附加到文件中的一行中?
我的失败尝试是
tail file.txt > file.txt && date >> file.txt
答案1
这会产生意想不到的结果:
tail file.txt > file.txt && echo $(date) >> file.txt
第一个重定向会截断文件前tail 进程启动,因此 tail 现在正在对一个空文件进行操作。(參考)
2条建议:
一个临时文件:
f=file.txt tmp=$(mktemp) { tail "$f"; date; } > "$tmp" && mv "$tmp" "$f"
-
f=file.txt { tail "$f"; date; } | sponge "$f"
请注意这echo $(date)
是多余的:您不需要echo
将输出发送date
到标准输出——date
默认情况下会这样做。
答案2
另一种不使用临时文件或安装额外工具的方法(但对于大文件效率不高):
<<<"$(<file)" tail >file && date >>file
这将读取命令替换,保证在解析其他重定向之前进行file
读取。file
答案3
你可以在 Ex 模式下使用 Vim:
ex -sc '1,-10d|x' file.txt
1,-10
选择除最后 10 行以外的所有行d
删除x
保存并关闭