Как мог я tail
и добавьте текст в файле, в одной строке, в Bash?
Моя неудачная попытка была бы
tail file.txt > file.txt && date >> file.txt
Это приводит к неожиданным результатам:
tail file.txt > file.txt && echo $(date) >> file.txt
первое перенаправление усекает файл прежде , процесс хвоста запускается, таким образом, хвост теперь воздействует на пустой файл. ( касательно )
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
к stdout - date
делает это по умолчанию.
Иначе не используя временные файлы или устанавливая дополнительные инструменты (но не эффективный для больших файлов):
<<<"$(<file)" tail >file && date >>file
Это читает file
в замене команды, гарантируя, что чтение file
произойдет, прежде чем другие перенаправления разрешены.
Можно использовать Vim в режиме Ex:
ex -sc '1,-10d|x' file.txt
1,-10
выбор почти длится, 10 строк
d
удаляют
x
, сохраняют и закрываются