Я пишу bash-скрипт для поиска файла, если он не существует, затем создайте его и добавьте к нему:
Host localhost
ForwardAgent yes
Так что "line then new line 'tab' then text"
я думаю, что это чувствительный формат. Я знаю, что вы можете сделать это:
cat temp.txt >> data.txt
Но это кажется странным, так как его две строки. Есть ли способ добавить это в этом формате:
echo "hello" >> greetings.txt
shell
text-processing
io-redirection
Легенда
источник
источник
( echo "line 1" ; echo "line 2" ) >>greetings.txt
.{ echo "line 1" ; echo "line 2"; } >>greetings.txt
cat <<EOT
EOT
cat <<FOO
Или, если вам нужна буквальная вкладка (а не четыре пробела в вашем вопросе):
Вы можете достичь того же эффекта с
echo
, но точно, как варьируется от реализации к реализации, в то время какprintf
является постоянным.источник
источник
Другой подход заключается в использовании
tee
Несколько строк выбора со
tee
страницы руководства пользователя:источник
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
========== РЕДАКТИРОВАТЬ == ==========
Есть ли у этого подхода какие-либо дополнительные преимущества по сравнению с другими решениями?
Да, этот подход имеет дополнительное преимущество, заключающееся в добавлении любых файлов, возвращаемых при поиске, например:
find . -name "*.html" -exec sed -i '$ a </html>' {} \;
Я использовал приведенный выше пример, чтобы вставить конечный HTML-тег, который отсутствовал на каждой HTML-странице в нескольких каталогах.
===================================
источник
sed
. BSDsed
вываливается с ошибкой:command a expects \ followed by text
. Так что не используйте это для решения по сценарию; это может сломаться. (Или сделайте это правильно, так как необходимый синтаксис BSD совместим с POSIX и будет работать и на GNUsed
.find
следующим образом :find . -name "*.txt" -exec sh -c 'printf "%s\n\t%s\n" "Host localhost" "ForwardAgent yes" >> "$1"' sh {} ";"
.>
,>>
) и, следовательно, не страдает от таких проблем, как запускsudo echo 'something' > /file
. Для меня это вполне позволяет добавить строку в файл в LXD контейнере , как , что:lxc exec c sed -- '$ a newline' /myfile
.echo "a new line" >> foo.file
не будет создавать новую строку, когда файл не является концом новой строки, ноsed -i '$ a a new line' foo.file
будет делать это, поэтомуsed
лучше, особенно если вы хотите всегда добавлять новую строку в файл.Я использовал sed, потому что его можно использовать с sudo. Например:
альтернатива очень уродлива, как:
и даже хуже, когда это делается с помощью ssh.
источник
sed -i
не принимаете расширение в качестве аргумента? В вашем примере могут быть неверные параметры.Еще один лайнер это:
Я бы предпочел
-e
вариант с мыслью, так как он дает больше контроля:источник
Можно
cat >> out.txt
добиться эмуляции с помощью Perl или Python для достижения того же эффекта. Perl:И питон:
Обратите внимание, что для Python вам придется нажать Ctrl+ Dдважды. См. Связанный вопрос на stackoverflow для получения дополнительной информации.
источник
Вот пример для добавления нескольких строк в файл:
источник
В дополнение к основному ответу, если для файла требуются права суперпользователя, простое добавление
sudo
передecho
не будет работать.Это связано с тем, что оболочка нарушает команды и хотя
echo
и запускается от имени root, но>>
работает с обычными привилегиями.Это будет работать для супер пользователя:
sudo su -c "echo 'Line 3' >> greetings.txt"
источник
su
здесь (sudo su
это не хорошо). Но вы правы в том, что вам нужно что-то, что управляет перенаправлением оболочки; возможноsudo sh -c "echo stuff >> file.txt"
. Нет чистой экономии, но лучшая практика.