Я могу сделать, cat file.txt
чтобы получить содержимое файла, но я также хочу добавить последнюю строку по своему выбору.
Я попробовал трубопровод, (cat file.txt ; echo "My final line") |
но только последняя линия проходит через трубу. Как я могу присоединиться к кошке и финальной линии?
Изменить для уточнения: я не хочу изменять сам файл. Я знаю , что если бы это было так , я мог бы сделать echo "My final line" >> file.txt
или , echo "My final line" | tee -a file.txt
но я только пытаюсь сделать Append в контексте данной конкретной команды , так что я могу труба в конкатенации file.txt
и "My final line"
.
command-line
pipe
cat
echo
DoubleBASS
источник
источник
echo "My final line" >> file.txt
?>>
если я хочу редактировать сам файл.file.txt
? Ваш фрагмент кода должен работать.Ответы:
Вы можете использовать
cat
способность читать из стандартного ввода в сочетании с его способностью читать несколько файлов для достижения этой цели.Вы также можете добавить строку, как таковую:
Обратите внимание, что вы не ограничены одной строкой.
cat
будет читать со стандартного ввода, пока не достигнет EOF. Вы можете передать выходные данныеcurl
, например, для добавления или добавления к выходным даннымcat
.источник
(cat file.txt ; echo "My final line") | …
также сделал бы это. Ноcat
лучше использовать +1 для того, для чего он был разработан.echo "$$" "$BASHPID" | head -q -n 1 /proc/mounts - | cat
против( head -q -n 1 /proc/mounts; echo "$$" "$BASHPID" ) | cat
или даже{ head -q -n 1 /proc/mounts; echo "$$" "$BASHPID"; } | cat
.Для добавления строки в файл, вы можете просто использовать оператор перенаправления оболочки добавления
>>
(файл будетopen(2)
-ed сO_APPEND
флагом):Теперь, если вы хотите просто просмотреть содержимое файла с добавленной последней строкой, я бы использовал
cat
два аргумента:file.txt
cat
речь идет только о файлах), вы можете использовать подстановку процесса<()
, которая будет возвращать дескриптор файла (/proc/self/fd/<fd_number>)
.Собираем их вместе:
Если вы хотите, чтобы вывод был разбит на
less
страницы , предположим, что это ваш любимый пейджер:источник
<()
работает для bash, но для каких других оболочек он работает? КШ? Тире?ksh
,zsh
- Да,dash
- Нет.Из
man sed
варианта-e
$
соответствует последней строке иa
добавляет строку.Если вы хотите добавить строку в файл навсегда, используйте
-i
Изменение команды на
источник
Это было уже разъяснено в комментариях к вопросу, но добавив его снова в качестве ответа здесь.
Команда, отмеченная в вопросе,
работает как положено - весь вывод подоболочки, сформированный скобками, передается второй команде.
Если файл не заканчивается новой строкой, возвращаемая строка добавляется к последней строке - это является общим для всех других решений здесь и может быть решено путем добавления еще одного (пустого) эха ранее.
источник
awk
:awk 1 file.txt; echo "My final line"
.awk 1 file
хороший трюк, чтобы компенсировать отсутствие EOL в конце файла.echo "\nMy final line"
без необходимости зависетьawk