`tail` и добавь в oneliner
Как я мог tail
и добавить текст в файл, в одну строку, в Bash?
Моя неудачная попытка будет
tail file.txt > file.txt && date >> file.txt
3 ответа
Это дает неожиданные результаты:
tail file.txt > file.txt && echo $(date) >> file.txt
Первое перенаправление усекает файл перед началом процесса tail, поэтому tail теперь работает с пустым файлом. ( ссылка)
2 предложения:
временный файл:
f=file.txt tmp=$(mktemp) { tail "$f"; date; } > "$tmp" && mv "$tmp" "$f"
sponge
из пакета moreutilsf=file.txt { tail "$f"; date; } | sponge "$f"
Обратите внимание, что echo $(date)
избыточно: вам не нужно echo
отправить вывод date
на выход - date
делает это по умолчанию.
Другой способ без использования временных файлов или установки дополнительных инструментов (но не эффективен для больших файлов):
<<<"$(<file)" tail >file && date >>file
Это читает file
в подстановке команд, гарантируя, что чтение file
будет происходить до разрешения других перенаправлений.
Вы можете использовать Vim в режиме Ex:
ex -sc '1,-10d|x' file.txt
1,-10
выбрать все, кроме последних 10 строкd
удалятьx
сохрани и закрой