Який найпростіший спосіб додати текст до файлу в 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").
Він використовує тут документ (або гередок) .
Однак якщо вам потрібен sudo для додавання до заявленого файлу, у вас виникнуть проблеми з використанням heredoc через перенаправлення вводу / виводу, якщо ви вводите безпосередньо в командному рядку.
Цей варіант буде працювати, коли ви вводите безпосередньо в командному рядку:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
Або ви можете скористатися tee
натомість, щоб уникнути проблеми судо-командного рядка, що спостерігається під час використання heredoc з котом:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >
роками і не знав про те, cat << 'EOF' >>
щоб додати! Спасибі