Como anexar saída ao final de um arquivo de texto


478

Como anexar a saída de um comando ao final de um arquivo de texto?

Respostas:


665

Use em >>vez de >ao direcionar a saída para um arquivo:

your_command >> file_to_append_to

Se file_to_append_tonão existir, será criado.

Exemplo:

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

4
O problema é que echoremove as novas linhas da string. Como você anexa a um arquivo uma string que contém novas linhas?
Timothy Swan

5
@ TimothySwan, acredito que com a opção -e.
Valentin Grégoire

O eco não remove novas linhas da sequência. Se você não citar corretamente o argumento, o shell dividirá a string e passará argumentos para eco e echo nunca verá as novas linhas.
William Pursell

106

Para appendum 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 overwriteum arquivo, use >

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

então a saída é

hello tom


74

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.


40

Use command >> file_to_append_topara 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 noclobberao seu .bashrc.

Isso garante que, se você digitar acidentalmente command > file_to_append_toum 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.



21

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


2
Essa é a melhor maneira de acrescentar algo a uma nova linha.
M_R_K

2
estava procurando uma maneira de acréscimo para os arquivos protegidos e isso resolve-lo
Woootiness

14

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

11

Eu usaria printf em vez de eco, porque é mais confiável e processa a formatação como nova linha \ncorretamente.

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

7

Eu sugiro que você faça duas coisas:

  1. Use >>no seu shell script para anexar conteúdo a um arquivo específico. O nome do arquivo pode ser corrigido ou usando algum padrão.
  2. Configure um cronograma horário para acionar o script de shell

7

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

1
Isso é enganoso em muitos detalhes. Os espaços não são importantes e canalizar uma saída vazia para cat... é completamente maluca. (Está vazio porque você acabou de redirecionar a saída padrão para um arquivo.) #
Tripleee
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.