Как добавить вывод в конец текстового файла

478

Как добавить вывод команды в конец текстового файла?

Vincy
источник

Ответы:

665

Используйте >>вместо того, чтобы >направлять вывод в файл:

your_command >> file_to_append_to

Если file_to_append_toне существует, он будет создан.

Пример:

$ echo "hello" > file
$ echo "world" >> file
$ cat file 
hello
world
aioobe
источник
4
Проблема в том, что echoудаляет символы новой строки из строки. Как вы добавляете в файл строку, которая содержит переводы строки?
Тимоти Свон
5
@TimothySwan, я думаю, с опцией -e.
Валентин Грегуар
echo не удаляет символы новой строки из строки. Если вам не удастся правильно заключить аргумент в кавычки, то оболочка разделит строку и передаст аргументы echo, и 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

yoctotutor.com
источник
74

Вы можете использовать оператор >>. Это добавит данные из команды в конец текстового файла.

Чтобы проверить это, попробуйте запустить:

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

Сделайте это пару раз, а затем запустите:

cat textfile.txt

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

walta
источник
40

Используйте command >> file_to_append_toдля добавления в файл.

Например echo "Hello" >> testFile.txt

ВНИМАНИЕ: если вы используете только один, >вы перезапишете содержимое файла. Чтобы этого никогда не происходило, вы можете добавить set -o noclobberк своему .bashrc.

Это гарантирует, что если вы случайно наберете command > file_to_append_toсуществующий файл, он предупредит вас, что файл уже существует. Пример сообщения об ошибке:file exists: testFile.txt

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

ремесло
источник
22

Используйте >>оператор для добавления текста в файл.

Нев Стокс
источник
21

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

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

В этой теме есть хорошие ответы о тройнике

victortv
источник
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 и после переименует файл, основываясь на текущей дате.

Запускайте вышеизложенное с помощью cron каждый час, или

while :
do
    cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
    sleep 3600
done
jm666
источник
11

Я бы использовал 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
Брэден Холт
источник
7

Я бы посоветовал вам сделать две вещи:

  1. Используйте >>в своем сценарии оболочки, чтобы добавить содержимое к определенному файлу. Имя файла может быть исправлено или с использованием некоторого шаблона.
  2. Установите почасовой cronjob для запуска сценария оболочки
sballmer
источник
7

Например, ваш файл содержит:

 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
Мангеш Бхапкар
источник
1
Это вводит в заблуждение во многих деталях. Пробелы не важны, и пустые выходные данные catпросто ... просто дурацкие. (Он пуст, потому что вы просто перенаправили стандартный вывод в файл.)
tripleee