Добавление строки в файл в команде кошки?

Я могу сделать cat file.txt для получения содержания файла, но я также хочу лавировать на заключительной строке моего собственного выбора.

Я пытался передать по каналу (cat file.txt ; echo "My final line") | но только заключительная строка становится прошедшей канал. Как я могу присоединиться к кошке и заключительной строке?

Редактирование для точки разъяснения: Я не хочу изменять сам файл. Я знаю, что, если это имело место, я мог бы сделать echo "My final line" >> file.txt или echo "My final line" | tee -a file.txt но я только пытаюсь сделать добавление в контексте этой конкретной команды, таким образом, я могу передать по каналу в конкатенации file.txt и "My final line".

11
задан 24 October 2017 в 07:12

4 ответа

Можно усилить catспособность читать из stdin, объединенного с, он - способность считать несколько файлов для достижения этого.

~$ cat file.txt
Hello from file.txt

~$ echo "My final line" | cat file.txt -
Hello from file.txt
My final line

Можно также предварительно ожидать строку, как таковую:

~$ echo "My final line" | cat - file.txt
My final line
Hello from file.txt

Обратите внимание, что Вы не ограничены одной строкой. cat будет читать из stdin, пока он не достигнет EOF. Можно передать вывод от curl, например, чтобы предварительно ожидать или добавить к выводу cat.

~$ curl -s http://perdu.com | cat file.txt -
Hello from file.txt
<html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre>    * <----- vous &ecirc;tes ici</pre></strong></body></html>
29
ответ дан 23 November 2019 в 03:49
sed -e '$aMy final line' file.txt

От man sed опция -e

-e script, --expression=script
    add the script to the commands to be executed

$ соответствует последней строке и a добавляет строку.

Если Вы хотели постоянно добавить строку в файл, использовать -i

-i[SUFFIX], --in-place[=SUFFIX]
    edit files in place (makes backup if SUFFIX supplied)

Изменение команды к

sed -i -e '$aMy final line' file.txt
11
ответ дан 23 November 2019 в 03:49

Для добавления строки в файл можно просто использовать оболочку, добавляют оператор перенаправления, >> (файл будет open(2)- редактор с O_APPEND флаг):

echo 'My final line' >>file.txt

Теперь, если бы Вы хотите только просмотреть содержание файла с заключительной добавленной строкой, я использовал бы cat с двумя аргументами:

  • Во-первых, Ваш файл, очевидно, скажем, file.txt
  • Вторым аргументом была бы строка по Вашему выбору, и передать строку как имя файла (как cat только соглашения с файлами), можно усилить замену процесса, <(), который возвратил бы дескриптор файла (/proc/self/fd/<fd_number>).

Соединение их:

cat file.txt <(echo 'My final line')

Если Вы хотите, чтобы вывод был разбит на страницы, приняв less Ваш любимый пейджер:

less file.txt <(echo 'My final line')
10
ответ дан 23 November 2019 в 03:49

Это было уже разъяснено в комментариях к вопросу, но добавлении его снова как ответ здесь.

Команда отмечена в вопросе,

(cat file.txt ; echo "My final line") | other command

работы, как ожидается – весь вывод от подоболочки, сформированной круглыми скобками, передаются по каналу к второй команде.

Если файл не заканчивается новой строкой, отраженная строка добавляется к последней строке – это распространено со всеми другими решениями здесь и может быть решено путем добавления другого (пустого) эха прежде.

7
ответ дан 23 November 2019 в 03:49

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

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