Ответы:
Используйте >>
вместо того, чтобы >
направлять вывод в файл:
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
Таким образом, при использовании >
он только позволит вам создать новый файл, а не перезаписать существующий файл.
Использование tee с опцией -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 и после переименует файл, основываясь на текущей дате.
Запускайте вышеизложенное с помощью cron каждый час, или
while :
do
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
sleep 3600
done
Я бы использовал printf вместо echo, потому что он более надежен и \n
правильно обрабатывает форматирование, например, новую строку .
Этот пример производит вывод, похожий на echo в предыдущих примерах:
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
если вы хотите добавить в конец файла, тогда ----> запомните пробелы между 'text' >> 'filename'
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
удаляет символы новой строки из строки. Как вы добавляете в файл строку, которая содержит переводы строки?