Как проще всего добавить текст в файл в Linux?
Я посмотрел на этот вопрос , но в принятом ответе используется дополнительная программа ( sed
). Я уверен, что должен быть более простой способ echo
или аналогичный.
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
По сути, вы можете выгрузить в файл любой текст, который хотите. CTRL-D отправляет сигнал конца файла, который завершает ввод и возвращает вас в оболочку.
sudo !!
- которая выполняет последнюю команду сsudo
добавлением в начале. Я недавно узнал, что это также работает с иnano
т. Д. (Случайно попытавшисьnano nano auth
...)!!
, круто. Так часто я делаю что-то вродеcat /var/log/apache/error.log
и получаю отказ. Это также можно сделать с помощью идентификатора из истории, напримерsudo !1419
, это выполнит команду в строке1419
истории как sudo.Как насчет:
Использование
>>
оператора добавит данные в конец файла, а использование оператора>
перезапишет содержимое файла, если он уже существует.printf
Таким же образом можно использовать :Обратите внимание, что использование вышеуказанного может быть опасным. Например, если у вас уже есть файл, и вам нужно добавить данные в конец файла, но вы забыли добавить последний,
>
все данные в файле будут уничтожены. Вы можете изменить это поведение, установивnoclobber
переменную в своем.bashrc
:Теперь, когда вы попытаетесь это сделать,
echo "hello" > file.txt
вы получите предупреждениеcannot overwrite existing file
.Теперь для принудительной записи в файл необходимо использовать специальный синтаксис:
Вы также должны знать, что по умолчанию
echo
добавляет завершающий символ новой строки, который можно подавить с помощью-n
флага:Ссылки
echo(1) - Linux man page
noclobber variable
I/O Redirection
источник
cat
, но вам лучше быть осторожным, не забудьте использовать>>
вместо>
!sudo rm -r /
=)sudo rm -r /
чемsudo rm -rf /
! ^ _ ^ Есть ли флаг, который запрашивал бы подтверждение перед перезаписью содержимого существующего файла с помощью>
? Использование псевдонима, что всегда использовать такой флаг, было бы хорошей идеей.set -o noclobber
в свой,.bashrc
тогда вы не сможете перезаписать существующий файл без использования специального синтаксисаecho "hello" >| <filename>
Другой возможный способ:
-a
Добавит в конце файла.При необходимости
sudo
используйте:источник
>/dev/null
конце предотвращает отображение «текста» в консоли.Выполните принятый ответ.
Вам нужно что-то другое, кроме CTRL-D, чтобы обозначить конец, если вы используете это в скрипте . Попробуйте вместо этого:
Это добавит текст в указанный файл (не включая «EOF»).
Он использует здесь документ (или heredoc) .
Однако если вам нужно добавить sudo к указанному файлу, вы столкнетесь с проблемами при использовании heredoc из-за перенаправления ввода-вывода, если вы вводите текст непосредственно в командной строке.
Этот вариант будет работать, когда вы вводите текст непосредственно в командной строке:
Или вы можете использовать
tee
вместо этого, чтобы избежать проблемы sudo в командной строке, наблюдаемой при использовании heredoc с cat:источник
cat << 'EOF' >
лет и не знал оcat << 'EOF' >>
добавлении! Спасибо