Как добавить несколько строк в файл

Я пишу сценарий bash для поиска файла, если он не существует, тогда создайте его и добавьте в него:

Host localhost ForwardAgent yes 

Итак, "line then new line 'tab' then text" Я думаю, что это чувствительный формат. Я знаю, вы можете это сделать:

 cat temp.txt >> data.txt 

Но это кажется странным с двух его линий. Есть ли способ добавить это в этом формате:

 echo "hello" >> greetings.txt 

7 Solutions collect form web for “Как добавить несколько строк в файл”

 # possibility 1: echo "line 1" >> greetings.txt echo "line 2" >> greetings.txt # possibility 2: echo "line 1 line 2" >> greetings.txt # possibility 3: cat <<EOT >> greetings.txt line 1 line 2 EOT 
 printf '%s\n %s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt 

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

 printf '%s\n\t%s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt 

Вы можете добиться такого же эффекта с помощью echo , но точно, как он отличается от реализации до реализации, тогда как printf является постоянным.

 echo -e "Hello \nWorld \n" >> greetings.txt 

SED может добавить строку в конец файла, например:

sed -i '$ a text to be inserted' fileName.file
$ выбирает конец файла, a указывает, что он добавляется, и после этого появляется текст, который нужно вставить. Тогда, конечно, имя файла.

Источник: http://www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines-to-file.html

========== EDIT ============

Имеет ли этот подход какую-либо дополнительную выгоду, чем другие решения?
Да, этот подход имеет дополнительное преимущество добавления любых файлов в поиск, например: find . -name "*.html" -exec sed -i '$ a </html>' {} \; find . -name "*.html" -exec sed -i '$ a </html>' {} \;

Я использовал приведенный выше пример, чтобы вставить конечный html-тег, отсутствующий на каждой странице html в нескольких каталогах.

===================================

Я использовал sed, потому что он может использоваться с sudo. Например:

 sudo sed -i '$ a text to be inserted' fileName.file 

альтернатива очень уродливая:

 sudo bash -c "echo a text to be inserted >> fileName.file" 

и даже уродливее, когда сделано с ssh.

Еще один лайнер:

 echo "Greetings 1" >> greetings.txt && echo "Greetings 2" >> greetings.txt 

Я бы предпочел вариант -e подумать, поскольку он дает больше контроля:

 echo -e "Greeting 1\nGreetings 2\n" >> greetings.txt 

Другой подход – использовать tee

 tee -a ~/.ssh/config << END Host localhost ForwardAgent yes END 

Несколько строк выбора из страницы пользователя tee :

Утилита tee копирует стандартный ввод в стандартный вывод, делая копию в ноль или более файлов.

-a – Добавить файл в файлы, а не перезаписывать их.

  • команда, как wc, но с тиковым поведением
  • wget возвращает html-страницу вместо исходного файла
  • Как сбросить дескриптор файла
  • Перенаправление Stderr неожиданно перенаправляет также некоторые встроенные функции BASH
  • Операторы перенаправления всегда открывают дескрипторы файлов параллельно?
  • Как захватить вывод mplayer в файл?
  • Как я могу отправить данные в STDIN фонового процесса?
  • Переадресация файла на процесс
  • Bash: понимание перенаправления ввода-вывода
  • Как отправить вывод на экран и почту?
  • Возможная ошибка перенаправления в zsh 5x
  • Linux и Unix - лучшая ОС в мире.