Відповіді:
Використовуйте >>
замість того, >
щоб направляти вихід у файл:
your_command >> file_to_append_to
Якщо file_to_append_to
його не існує, він буде створений.
Приклад:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
Для 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
Ви можете скористатися оператором >>. Це додасть дані з команди до кінця текстового файлу.
Щоб перевірити цю спробу:
echo "Hi this is a test" >> textfile.txt
Зробіть це кілька разів, а потім запустіть:
cat textfile.txt
Ви побачите, що ваш текст кілька разів додавали до файлу textfile.txt.
Використовуйте command >> file_to_append_to
для додавання до файлу.
Наприклад echo "Hello" >> testFile.txt
ПОПЕРЕДЖЕННЯ: якщо ви використовуєте лише один, >
ви перезапишете вміст файлу. Щоб цього не сталося, ви можете додати set -o noclobber
до свого .bashrc
.
Це гарантує, що якщо ви випадково введете command > file_to_append_to
наявний файл, він попередить вас про те, що файл вже існує. Зразок повідомлення про помилку:file exists: testFile.txt
Таким чином, при використанні >
він лише дозволить створити новий файл, а не перезаписати існуючий файл.
Використання трійника з опцією -a (--append) дозволяє додавати відразу кілька файлів, а також використовувати sudo (дуже корисно при додаванні до захищених файлів). Крім того, цікаво, якщо вам потрібно використовувати інші оболонки, крім bash, оскільки не всі оболонки підтримують оператори> та >>
echo "hello world" | sudo tee -a output.txt
Ця тема має хороші відповіді про трійник
для всього питання:
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
Я б використав 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
Наприклад, ваш файл містить:
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
cat
є ... просто повністю дурною. (Це порожньо, тому що ви щойно перенаправили стандартний вихід у файл.)
echo
видаляє нові рядки з рядка. Як ви додаєте до файлу рядок, що містить нові рядки?