Я могу сделать 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"
.
Можно усилить 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 êtes ici</pre></strong></body></html>
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
Для добавления строки в файл можно просто использовать оболочку, добавляют оператор перенаправления, >>
(файл будет 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')
Это было уже разъяснено в комментариях к вопросу, но добавлении его снова как ответ здесь.
Команда отмечена в вопросе,
(cat file.txt ; echo "My final line") | other command
работы, как ожидается – весь вывод от подоболочки, сформированной круглыми скобками, передаются по каналу к второй команде.
Если файл не заканчивается новой строкой, отраженная строка добавляется к последней строке – это распространено со всеми другими решениями здесь и может быть решено путем добавления другого (пустого) эха прежде.