Como anexar várias linhas a um arquivo

242

Estou escrevendo um script bash para procurar um arquivo, se ele não existir. Em seguida, crie-o e anexe-o a ele:

Host localhost
    ForwardAgent yes

Então, "line then new line 'tab' then text" , acho que é um formato sensível. Eu sei que você pode fazer isso:

cat temp.txt >> data.txt

Mas parece estranho desde suas duas linhas. Existe uma maneira de acrescentar que neste formato:

echo "hello" >> greetings.txt
    
por TheLegend 27.05.2013 / 16:49

10 respostas

420
# possibility 1:
echo "line 1" >> greetings.txt
echo "line 2" >> greetings.txt

# possibility 2:
echo "line 1
line 2" >> greetings.txt

# possibility 3:
cat <<EOT >> greetings.txt
line 1
line 2
EOT
    
por 27.05.2013 / 16:54
54
printf '%s\n    %s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt

Ou, se for uma guia literal que você deseja (em vez dos quatro espaços da sua pergunta):

printf '%s\n\t%s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt

Você pode obter o mesmo efeito com echo , mas exatamente como varia de implementação para implementação, enquanto printf é constante.

    
por 27.05.2013 / 16:57
29
echo -e "Hello \nWorld \n" >> greetings.txt
    
por 30.07.2014 / 18:21
13

Outra abordagem é usar tee

tee -a ~/.ssh/config << END
Host localhost
  ForwardAgent yes
END

Algumas linhas de escolha da página de manual de tee :

The tee utility copies standard input to standard output, making a copy in zero or more files.

-a - Append the output to the files rather than overwriting them.

    
por 08.08.2017 / 13:09
5

SED pode anexar uma linha ao final de um arquivo da seguinte forma:

sed -i '$ a text to be inserted' fileName.file
$ seleciona o final do arquivo, o a diz para anexar e, depois disso, o texto a ser inserido. Então, claro, o nome do arquivo.


Fonte: link

========== EDITAR ============


Esta abordagem tem algum benefício adicional do que outras soluções?
Sim, essa abordagem tem o benefício adicional de acrescentar a qualquer arquivo retornado em uma pesquisa, como: find . -name "*.html" -exec sed -i '$ a </html>' {} \;

Eu usei o exemplo acima para inserir a tag html final que estava faltando em cada página html dentro de vários diretórios.

===================================

    
por 18.03.2016 / 20:40
1

Eu usei o sed porque ele pode ser usado com o sudo. Por exemplo:

sudo sed -i '$ a text to be inserted' fileName.file 

a alternativa é muito feia como:

sudo bash -c "echo a text to be inserted >> fileName.file"  

e ainda mais feio quando feito com ssh.

    
por 24.05.2016 / 20:34
1

Outro forro é:

echo "Greetings 1" >> greetings.txt && echo "Greetings 2" >> greetings.txt

Eu prefiro que a opção -e seja considerada, pois isso dá mais controle:

echo -e "Greeting 1\nGreetings 2\n" >> greetings.txt
    
por 27.06.2017 / 17:15
0

Pode-se emular cat >> out.txt com Perl ou Python para obter o mesmo efeito. Perl:

perl -e 'open(fh,">>","./out.txt");while(<>){printf(fh "%s",$_)};close(fh);'

E Python:

python -c 'import sys;f=open(sys.argv[1],"a");l=[i for i in sys.stdin];f.write("".join(l))' out.txt 

Note que para python você terá que pressionar Ctrl + D duas vezes. Consulte a pergunta relacionada no stackoverflow para obter mais informações.

    
por 03.12.2017 / 03:55
0

Aqui está um exemplo para anexar várias linhas em um arquivo:

{
        echo '  directory "/var/cache/bind";'
        echo '  listen-on { 127.0.0.1; };'
        echo '  listen-on-v6 { none; };'
        echo '  version "";'
        echo '  auth-nxdomain no;'
        echo '  forward only;'  
        echo '  forwarders { 8.8.8.8; 8.8.4.4; };'
        echo '  dnssec-enable no;'
        echo '  dnssec-validation no;'
} >> your_file.txt
    
por 12.04.2018 / 09:44
0

Além da resposta principal, caso o arquivo precise de permissões de superusuário, apenas adicionar sudo na frente de echo não funcionará.

Isso ocorre porque o shell quebra os comandos e, embora echo tenha sido executado como root, mas >> foi executado com privilégios normais.

Isso funcionará para o superusuário: sudo su -c "echo 'Line 3' >> greetings.txt"

    
por 07.06.2018 / 21:50