Как проще всего добавить текст в файл в 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' >>
добавлении! Спасибо