Respostas:
Use em >>
vez de >
ao direcionar a saída para um arquivo:
your_command >> file_to_append_to
Se file_to_append_to
não existir, será criado.
Exemplo:
$ echo "hello" > file
$ echo "world" >> file
$ cat file
hello
world
Para append
um arquivo, use >>
echo "hello world" >> read.txt
cat read.txt
echo "hello siva" >> read.txt
cat read.txt
então a saída deve ser
hello world # from 1st echo command
hello world # from 2nd echo command
hello siva
Para overwrite
um arquivo, use >
echo "hello tom" > read.txt
cat read.txt
então a saída é
hello tom
Você pode usar o operador >>. Isso acrescentará dados de um comando ao final de um arquivo de texto.
Para testar isso, tente executar:
echo "Hi this is a test" >> textfile.txt
Faça isso algumas vezes e execute:
cat textfile.txt
Você verá que o seu texto foi anexado várias vezes ao arquivo textfile.txt.
Use command >> file_to_append_to
para anexar a um arquivo.
Por exemplo echo "Hello" >> testFile.txt
CUIDADO: se você usar apenas um único >
, substituirá o conteúdo do arquivo. Para garantir que isso nunca aconteça, você pode adicionar set -o noclobber
ao seu .bashrc
.
Isso garante que, se você digitar acidentalmente command > file_to_append_to
um arquivo existente, ele irá alertá-lo de que o arquivo já existe. Exemplo de mensagem de erro:file exists: testFile.txt
Assim, quando você o usar >
, permitirá apenas criar um novo arquivo, não substituir um arquivo existente.
Use o >>
operador para anexar texto a um arquivo.
O uso de tee com a opção -a (--append) permite anexar vários arquivos de uma só vez e também usar o sudo (muito útil ao anexar arquivos protegidos). Além disso, é interessante se você precisar usar outros shells além do bash, pois nem todos os shells suportam os operadores> e >>
echo "hello world" | sudo tee -a output.txt
Este tópico tem boas respostas sobre tee
para toda a pergunta:
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
isso acrescentará 720 linhas (30 * 24) ao o.txt e depois renomeará o arquivo com base na data atual.
Execute o procedimento acima com o cron a cada hora ou
while :
do
cmd >> o.txt && [[ $(wc -l <o.txt) -eq 720 ]] && mv o.txt $(date +%F).o.txt
sleep 3600
done
Eu usaria printf em vez de eco, porque é mais confiável e processa a formatação como nova linha \n
corretamente.
Este exemplo produz uma saída semelhante ao eco nos exemplos anteriores:
printf "hello world" >> read.txt
cat read.txt
hello world
No entanto, se você substituísse printf por echo neste exemplo, echo trataria \ n como uma string, ignorando a intenção
printf "hello\nworld" >> read.txt
cat read.txt
hello
world
Por exemplo, seu arquivo contém:
1. mangesh@001:~$ cat output.txt
1
2
EOF
se você quiser acrescentar no final do arquivo, lembre-se de espaços entre 'text' >> 'filename'
2. mangesh@001:~$ echo somthing to append >> output.txt|cat output.txt
1
2
EOF
somthing to append
E para substituir o conteúdo do arquivo:
3. mangesh@001:~$ echo 'somthing new to write' > output.tx|cat output.tx
somthing new to write
cat
... é completamente maluca. (Está vazio porque você acabou de redirecionar a saída padrão para um arquivo.) #
echo
remove as novas linhas da string. Como você anexa a um arquivo uma string que contém novas linhas?