'хвост' и добавляет в остроте

Как мог я tail и добавьте текст в файле, в одной строке, в Bash?

Моя неудачная попытка была бы

tail file.txt > file.txt && date >> file.txt
1
задан 15 January 2016 в 03:59

3 ответа

Это приводит к неожиданным результатам:

tail file.txt > file.txt && echo $(date) >> file.txt

первое перенаправление усекает файл прежде , процесс хвоста запускается, таким образом, хвост теперь воздействует на пустой файл. ( касательно )

2 предложения:

  1. временный файл:

    f=file.txt
    tmp=$(mktemp)
    { tail "$f"; date; } > "$tmp" && mv "$tmp" "$f"
    
  2. sponge от пакет moreutils

    f=file.txt
    { tail "$f"; date; } | sponge "$f"
    

Примечание, что echo $(date) избыточно: Вам не нужно echo для отправки, вывод date к stdout - date делает это по умолчанию.

3
ответ дан 3 December 2019 в 06:59

Иначе не используя временные файлы или устанавливая дополнительные инструменты (но не эффективный для больших файлов):

<<<"$(<file)" tail >file && date >>file

Это читает file в замене команды, гарантируя, что чтение file произойдет, прежде чем другие перенаправления разрешены.

1
ответ дан 3 December 2019 в 06:59

Можно использовать Vim в режиме Ex:

ex -sc '1,-10d|x' file.txt
  1. 1,-10 выбор почти длится, 10 строк

  2. d удаляют

  3. x, сохраняют и закрываются

0
ответ дан 3 December 2019 в 06:59

Другие вопросы по тегам:

Похожие вопросы: