Qual é a maneira mais fácil de anexar texto a um arquivo no Linux?
Eu dei uma olhada nesta pergunta , mas a resposta aceita usa um programa adicional ( sed
) Tenho certeza de que deveria haver uma maneira mais fácil com echo
ou semelhante.
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
Basicamente, você pode despejar qualquer texto que desejar no arquivo. CTRL-D envia um sinal de fim de arquivo, que termina a entrada e retorna ao shell.
sudo !!
- que executa o último comando comsudo
prefixado. Recentemente descobri que isso também funciona comnano
etc (acidentalmente tentandonano nano auth
...)!!
antes, demais. Freqüentemente eu faço coisas comocat /var/log/apache/error.log
e tenho permissão negada. Isso também pode ser feito com um id do históricosudo !1419
, por exemplo , isso executará o comando na linha1419
do histórico como sudo.E se:
Usando o
>>
operador irá anexar dados no final do arquivo, enquanto o uso do>
irá sobrescrever o conteúdo do arquivo se já existir.Você também pode usar
printf
da mesma maneira:Observe que pode ser perigoso usar o acima. Por exemplo, se você já tiver um arquivo e precisar acrescentar dados ao final do arquivo e se esquecer de adicionar por último,
>
todos os dados do arquivo serão destruídos. Você pode alterar esse comportamento definindo anoclobber
variável em.bashrc
:Agora, quando você tentar fazer
echo "hello" > file.txt
, receberá um aviso dizendocannot overwrite existing file
.Para forçar a gravação no arquivo, você deve usar a sintaxe especial:
Você também deve saber que, por padrão,
echo
adiciona um caractere de nova linha à direita que pode ser suprimido usando o-n
sinalizador:Referências
echo(1) - Linux man page
noclobber variable
I/O Redirection
fonte
cat
, mas é melhor você ter cuidado ao usar em>>
vez de>
!sudo rm -r /
=)sudo rm -r /
quesudo rm -rf /
! ^ _ ^ Existe um sinalizador que pede confirmação antes de substituir o conteúdo de um arquivo existente com>
? Aliasing que usar sempre esse sinalizador parece que seria uma boa ideia.set -o noclobber
em seu.bashrc
então você não pode sobrescrever um arquivo existente sem usar a sintaxe especialecho "hello" >| <filename>
Outra maneira possível é:
o
-a
será anexado no final do arquivo.Se precisar
sudo
, use:fonte
>/dev/null
no final evita que "texto" seja mostrado em seu console.Acompanhamento para resposta aceita.
Você precisa de algo diferente de CTRL-D para designar o fim, se estiver usando isso em um script . Em vez disso, tente isto:
Isso acrescentará texto ao arquivo declarado (não incluindo "EOF").
Ele utiliza um documento here (ou heredoc) .
No entanto, se você precisar que o sudo seja anexado ao arquivo indicado, terá problemas ao utilizar um heredoc devido ao redirecionamento de E / S se estiver digitando diretamente na linha de comando.
Esta variação funcionará quando você estiver digitando diretamente na linha de comando:
Ou você pode usar, em
tee
vez disso, para evitar o problema de sudo da linha de comando visto ao usar o heredoc com cat:fonte
cat << 'EOF' >
há anos e não sabia sobrecat << 'EOF' >>
como acrescentar! Obrigado