Как проще всего добавить текст в файл в Linux?
Я посмотрел на этот вопрос , но в принятом ответе используется дополнительная программа ( sed). Я уверен, что должен быть более простой способ echoили аналогичный.
Как проще всего добавить текст в файл в 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.
Как насчет:
echo "hello" >> <filename>
Использование >>оператора добавит данные в конец файла, а использование оператора> перезапишет содержимое файла, если он уже существует.
printfТаким же образом можно использовать :
printf "hello" >> <filename>
Обратите внимание, что использование вышеуказанного может быть опасным. Например, если у вас уже есть файл, и вам нужно добавить данные в конец файла, но вы забыли добавить последний, >все данные в файле будут уничтожены. Вы можете изменить это поведение, установив noclobberпеременную в своем .bashrc:
set -o noclobber
Теперь, когда вы попытаетесь это сделать, echo "hello" > file.txtвы получите предупреждение cannot overwrite existing file.
Теперь для принудительной записи в файл необходимо использовать специальный синтаксис:
echo "hello" >| <filename>
Вы также должны знать, что по умолчанию echoдобавляет завершающий символ новой строки, который можно подавить с помощью -nфлага:
echo -n "hello" >> <filename>
Ссылки
cat, но вам лучше быть осторожным, не забудьте использовать >>вместо >!
sudo rm -r /=)
sudo rm -r /чем sudo rm -rf /! ^ _ ^ Есть ли флаг, который запрашивал бы подтверждение перед перезаписью содержимого существующего файла с помощью >? Использование псевдонима, что всегда использовать такой флаг, было бы хорошей идеей.
set -o noclobberв свой, .bashrcтогда вы не сможете перезаписать существующий файл без использования специального синтаксисаecho "hello" >| <filename>
Другой возможный способ:
echo "text" | tee -a filename >/dev/null
-aДобавит в конце файла.
При необходимости sudoиспользуйте:
echo "text" | sudo tee -a filename >/dev/null
>/dev/nullконце предотвращает отображение «текста» в консоли.
Выполните принятый ответ.
Вам нужно что-то другое, кроме CTRL-D, чтобы обозначить конец, если вы используете это в скрипте . Попробуйте вместо этого:
cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
Это добавит текст в указанный файл (не включая «EOF»).
Он использует здесь документ (или heredoc) .
Однако если вам нужно добавить sudo к указанному файлу, вы столкнетесь с проблемами при использовании heredoc из-за перенаправления ввода-вывода, если вы вводите текст непосредственно в командной строке.
Этот вариант будет работать, когда вы вводите текст непосредственно в командной строке:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
Или вы можете использовать teeвместо этого, чтобы избежать проблемы sudo в командной строке, наблюдаемой при использовании heredoc с cat:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >лет и не знал о cat << 'EOF' >>добавлении! Спасибо