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

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

Host localhost ForwardAgent yes 

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

 cat temp.txt >> data.txt 

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

 echo "hello" >> greetings.txt 

  • Вложенное чтение не выполнено
  • Чтение строк из файла с помощью bash: for vs. while
  • xargs с перенаправлением stdin / stdout
  • Нужно пояснить несколько аргументов и перенаправление ввода с помощью кошки
  • В форме `exec FD>` exec
  • Как добавить строку в файл, который имеет только права на запись в root и продолжить выполнение скрипта
  • Как ssh запрашивает пароль при перенаправлении всех входов и выходов?
  • Перенаправление Bash не работает для команды SQLite
  • 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 – Добавить файл в файлы, а не перезаписывать их.

    Linux и Unix - лучшая ОС в мире.