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.
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.
Respostas:
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 com sudo
prefixado. Recentemente descobri que isso também funciona com nano
etc (acidentalmente tentando nano nano auth
...)
!!
antes, demais. Freqüentemente eu faço coisas como cat /var/log/apache/error.log
e tenho permissão negada. Isso também pode ser feito com um id do histórico sudo !1419
, por exemplo , isso executará o comando na linha 1419
do histórico como sudo.
E se:
echo "hello" >> <filename>
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:
printf "hello" >> <filename>
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 a noclobber
variável em .bashrc
:
set -o noclobber
Agora, quando você tentar fazer echo "hello" > file.txt
, receberá um aviso dizendo cannot overwrite existing file
.
Para forçar a gravação no arquivo, você deve usar a sintaxe especial:
echo "hello" >| <filename>
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:
echo -n "hello" >> <filename>
Referências
cat
, mas é melhor você ter cuidado ao usar em >>
vez de >
!
sudo rm -r /
=)
sudo rm -r /
que sudo 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 é:
echo "text" | tee -a filename >/dev/null
o -a
será anexado no final do arquivo.
Se precisar sudo
, use:
echo "text" | sudo tee -a filename >/dev/null
>/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:
cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
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:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
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:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >
há anos e não sabia sobre cat << 'EOF' >>
como acrescentar! Obrigado