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

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

Host localhost
    ForwardAgent да

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

cat temp.txt>>> data.txt

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

echo "hello">>>>>> greetings.txt
219 голосов | спросил TheLegend 27 Maypm13 2013, 18:49:16

10 ответов


375
# возможность 1:
эхо "строка 1"> greetings.txt
эхо-строка 2 "> greetings.txt

# возможность 2:
эхо "1
строка 2 "> greetings.txt

# возможность 3:
cat <EOT>> greetings.txt
линия 1
строка 2
СРВ
ответил Hauke Laging 27 Maypm13 2013, 18:54:40
54
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 является постоянным.

ответил evilsoup 27 Maypm13 2013, 18:57:56
29
echo -e "Hello \ nWorld \ n">>>> greetings.txt
ответил kendotwill 30 J000000Wednesday14 2014, 20:21:20
10

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

tee -a ~ /.ssh /config <<КОНЕЦ
Host localhost
  ForwardAgent да
КОНЕЦ

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

  

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

     

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

ответил Chris Wilson 8 PM00000020000000231 2017, 14:09:02
5

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

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


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

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

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

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

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

ответил OB7DEV 18 MarpmFri, 18 Mar 2016 22:40:05 +03002016-03-18T22:40:05+03:0010 2016, 22:40:05
1

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

sudo sed -i '$ текст для вставки' ​​fileName.file

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

sudo bash -c "эхо текст, который нужно вставить>> fileName.file"

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

ответил Fred Mehrdad 24 Maypm16 2016, 21:34:57
0

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

echo "Приветствия 1">>>>> greetings.txt & & эхо "Приветствия 2">>> greetings.txt

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

echo -e "Приветствие 1 \ nГравины 2 \ n">>>> greetings.txt
ответил Erdal G. 27 J0000006Europe/Moscow 2017, 18:15:39
0

Можно эмулировать cat>> gt; out.txt с Perl или Python для достижения такого же эффекта. Perl:

perl -e 'open (fh, "> gt;", "./out.txt"), while (<gt;) {printf (fh "% s", $ _)} ; близко (ФХ);»

И Python:

python -c 'import sys; f = open (sys.argv [1], "a"); l = [i для i в sys.stdin]; f.write ("". join ( l)) 'out.txt

Обратите внимание, что для python вам нужно дважды нажать Ctrl + D . См. связанный с этим вопрос в stackoverflow для получения дополнительной информации.

ответил Sergiy Kolodyazhnyy 3 SunEurope/Moscow2017-12-03T05:55:17+03:00Europe/Moscow12bEurope/MoscowSun, 03 Dec 2017 05:55:17 +0300 2017, 05:55:17
0

Вот пример добавления нескольких строк в файл:

{
        echo 'directory "/var /cache /bind";'
        echo 'listen-on {127.0.0.1; };»
        echo 'listen-on-v6 {none; };»
        echo 'version "";
        echo 'auth-nxdomain no;'
        echo 'forward only;'
        echo 'forwarders {8.8.8.8; 8.8.4.4; };»
        echo 'dnssec-enable no;'
        echo 'dnssec-validation no;'
}>>>> your_file.txt
ответил user2753331 12 AMpThu, 12 Apr 2018 10:44:08 +030044Thursday 2018, 10:44:08
0

В дополнение к основному ответу, если файл нуждается в суперпользователях, просто добавление sudo перед echo не будет работать.

Это происходит из-за того, что оболочка разбивает команды, и хотя echo работает от имени root, но >> работает с обычными привилегиями.

Это будет работать для суперпользователя: sudo su -c "echo 'Line 3'> greetings.txt"

ответил SJ00 7 J0000006Europe/Moscow 2018, 22:50:18

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132