Как добавить несколько строк в файл
Я пишу скрипт bash для поиска файла, если он не существует, затем создайте его и добавьте к нему:
Host localhost
ForwardAgent да
Итак, ", затем введите новую строку" tab ", затем текст"
Я думаю, что это чувствительный формат.
Я знаю, что вы можете это сделать:
cat temp.txt>>> data.txt
Но это кажется странным с тех двух строк. Есть ли способ добавить это в этом формате:
echo "hello">>>>>> greetings.txt
10 ответов
# возможность 1:
эхо "строка 1"> greetings.txt
эхо-строка 2 "> greetings.txt
# возможность 2:
эхо "1
строка 2 "> greetings.txt
# возможность 3:
cat <EOT>> greetings.txt
линия 1
строка 2
СРВ
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
Другой подход - использовать tee
tee -a ~ /.ssh /config <<КОНЕЦ
Host localhost
ForwardAgent да
КОНЕЦ
Несколько строк выбора из man-страницы tee
:
Утилита tee копирует стандартный ввод в стандартный вывод, делая копировать в ноль или более файлов.
-a - добавьте вывод в файлы, а не перезаписывайте их.
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 в нескольких каталогах.
===================================
Я использовал sed, потому что его можно использовать с sudo. Например:
sudo sed -i '$ текст для вставки' fileName.file
альтернатива очень уродливая:
sudo bash -c "эхо текст, который нужно вставить>> fileName.file"
и даже более уродливым, когда выполняется с помощью ssh.
Еще один лайнер:
echo "Приветствия 1">>>>> greetings.txt & & эхо "Приветствия 2">>> greetings.txt
Я бы предпочел вариант -e
, поскольку он дает больше контроля:
echo -e "Приветствие 1 \ nГравины 2 \ n">>>> greetings.txt
Можно эмулировать 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 для получения дополнительной информации.
Вот пример добавления нескольких строк в файл:
{
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
В дополнение к основному ответу, если файл нуждается в суперпользователях, просто добавление sudo
перед echo
не будет работать.
Это происходит из-за того, что оболочка разбивает команды, и хотя echo
работает от имени root, но >>
работает с обычными привилегиями.
Это будет работать для суперпользователя:
sudo su -c "echo 'Line 3'> greetings.txt"