Як додати вихід до кінця текстового файлу


478

Як додати висновок команди до кінця текстового файлу?

Відповіді:


665

Використовуйте >>замість того, >щоб направляти вихід у файл:

your_command >> file_to_append_to

Якщо file_to_append_toйого не існує, він буде створений.

Приклад:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world

4
Проблема полягає в тому, що echoвидаляє нові рядки з рядка. Як ви додаєте до файлу рядок, що містить нові рядки?
Тимофій Лебідь

5
@TimothySwan, я вважаю, що варіант -e.
Валентин Грегоар

echo не видаляє нові рядки з рядка. Якщо вам не вдасться правильно процитувати аргумент, то оболонка розділить рядок і передасть аргументи на ехо, а ехо ніколи навіть не побачить нових рядків.
Вільям Перселл

106

Для appendвикористання файлів >>

echo "hello world"  >> read.txt   
cat read.txt     
echo "hello siva" >> read.txt   
cat read.txt

тоді вихід повинен бути

hello world   # from 1st echo command
hello world   # from 2nd echo command
hello siva

Для overwriteвикористання файлів >

echo "hello tom" > read.txt
cat read.txt  

то вихідний варіант

hello tom


74

Ви можете скористатися оператором >>. Це додасть дані з команди до кінця текстового файлу.

Щоб перевірити цю спробу:

echo "Hi this is a test" >> textfile.txt

Зробіть це кілька разів, а потім запустіть:

cat textfile.txt

Ви побачите, що ваш текст кілька разів додавали до файлу textfile.txt.


40

Використовуйте command >> file_to_append_toдля додавання до файлу.

Наприклад echo "Hello" >> testFile.txt

ПОПЕРЕДЖЕННЯ: якщо ви використовуєте лише один, >ви перезапишете вміст файлу. Щоб цього не сталося, ви можете додати set -o noclobberдо свого .bashrc.

Це гарантує, що якщо ви випадково введете command > file_to_append_toнаявний файл, він попередить вас про те, що файл вже існує. Зразок повідомлення про помилку:file exists: testFile.txt

Таким чином, при використанні >він лише дозволить створити новий файл, а не перезаписати існуючий файл.



21

Використання трійника з опцією -a (--append) дозволяє додавати відразу кілька файлів, а також використовувати sudo (дуже корисно при додаванні до захищених файлів). Крім того, цікаво, якщо вам потрібно використовувати інші оболонки, крім bash, оскільки не всі оболонки підтримують оператори> та >>

echo "hello world" | sudo tee -a output.txt

Ця тема має хороші відповіді про трійник


2
Це найкращий спосіб додати щось новим рядком.
M_R_K

2
шукав спосіб додавання до захищених файлів, і це вирішує це
Woootiness

14

для всього питання:

cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt

це додасть 720 рядків (30 * 24) в o.txt і після цього буде перейменовано файл на основі поточної дати.

Виконуйте вище з кроном щогодини, або

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done

11

Я б використав printf замість відлуння, тому що це більш надійно і обробляє форматування, наприклад, новий рядок \nналежним чином.

Цей приклад дає результат, подібний відлунню у попередніх прикладах:

printf "hello world"  >> read.txt   
cat read.txt
hello world

Однак якщо ви замінили printf на echo в цьому прикладі, echo трактуватиме \ n як рядок, ігноруючи таким чином намір

printf "hello\nworld"  >> read.txt   
cat read.txt
hello
world

7

Я б запропонував вам зробити дві речі:

  1. Використовуйте >>у своєму скрипті оболонки, щоб додати вміст до певного файлу. Ім'я файлу можна виправити або за допомогою деякого шаблону.
  2. Налаштуйте щогодинний cronjob, щоб запустити скрипт оболонки

7

Наприклад, ваш файл містить:

 1.  mangesh@001:~$ cat output.txt
    1
    2
    EOF

якщо ви хочете додати в кінці файлу, то ----> запам'ятайте пробіли між 'текстом' >> 'ім'ям файлу'

  2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt 
    1
    2
    EOF
    somthing to append

І щоб перезаписати вміст файлу:

  3.  mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
    somthing new to write

1
Це вводить в оману багато деталей. Пробіли не важливі, і пустота порожнього виводу catє ... просто повністю дурною. (Це порожньо, тому що ви щойно перенаправили стандартний вихід у файл.)
tripleee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.