Como limpar o texto em um arquivo?

71

Como limpar o texto que existia em um arquivo de texto sem abri-lo?

Quero dizer, por exemplo, tenho um arquivo como hello.txtem alguns dados de texto e como posso limpar o texto total nesse arquivo sem abri-lo?

Com isso, quero dizer não usar nenhum editor como nano, Gedit, etc.

rɑːdʒɑ
fonte
11
O que você quer dizer com 'abrir' um arquivo? Em todas as respostas dadas até o momento, o arquivo ainda será aberto para gravação pelo shell. No final, o shell é apenas um programa como outro qualquer.
101313 Jeff
@Jef não está usando nada como nano, gedit etc.
rɑːdʒɑ
Hus787 Não digitei para chegar lá, se você acha que sim, congratulo-me com o seu interesse na minha pergunta.
rɑːdʒɑ
Concordo com o comentário de Jeff ... Eu também tenho opinião * de que o fluxo de arquivos precisa ser aberto para ser gravado, se você usa editores de texto ou redirecionamento. ( * aprecio alguém sugerindo links para ajudar com o assunto )
precisa

Respostas:

139

Basta abrir seu terminal com CTRL+ ALT+ Te digite como

 > hello.txt

é isso, seus dados nesse arquivo serão limpos sem abri-lo.

Exemplo:

insira a descrição da imagem aqui

rɑːdʒɑ
fonte
5
Tecnicamente, o arquivo será aberto. Apenas não em um editor.
John Dibling
2
@JohnDibling, na verdade, isso é redirecionamento, acredito que o arquivo não está sendo aberto aqui. No redirecionamento O conteúdo de stdoutsubstitui o arquivo existente, se houver. Nesse caso, não há nada em stdout. Portanto, o arquivo está sendo sobrescrito com void, essencialmente limpando dados anteriores, se houver.
souravc
Existe uma maneira de desfazer esse comando?
Rao
@Rao, se for um tamanho grande como> 10GB, pode ser. Mas até que ponto não tenho certeza.
rɑːdʒɑ
28

A maneira mais fácil é truncar um arquivo é redirecionar a saída do comando no-op shell ( :) para o arquivo que você deseja apagar.

: > hello.txt
eradman
fonte
2
Provavelmente não é o mais fácil (em relação ao justo >), mas o mais rápido, com certeza .. eu me pergunto por que não foi mencionado em nenhuma das respostas desta pergunta muito vista .. aqui, pegue +1 ..
heemayl
13

Também vou usar o redirecionamento como a resposta de rajagenupula. Mas há um pouco mais de flexibilidade. Abra um terminal e digite,

cat > hello.txt

E pressione Ctrl+ C. Isso apagará o arquivo anterior. Se você quiser isso, tudo bem.

Se desejar, você pode fazer algo mais depois de limpar o arquivo. Dessa maneira, não apenas você pode limpar um arquivo sem abrir, mas também escrever algumas linhas com a formatação correta no arquivo. Digamos que você queira escrever "O Ubuntu é o melhor SO" depois de limpar o arquivo, basta

cat > hello.txt
Ubuntu is the 
best OS

Então pressione Ctrl+ C. Agora o arquivo anterior está apagado. Ao mesmo tempo, as palavras existem em duas linhas, como eu as coloco.

Veja o exemplo:

insira a descrição da imagem aqui

souravc
fonte
Ei, obrigado por responder. tão pouco, mas trabalho a ser feito logo após que também & mas ainda interessante + 1.
rɑːdʒɑ
>significa redirecionamento. cat > filegravará stdoutno arquivo, substituindo qualquer arquivo existente.
souravc
10

Eu tenho que fazer isso o tempo todo com arquivos de log. A maneira mais fácil que encontrei é com o seguinte comando:

cat /dev/null > hello.txt

Isso exclui a alocação do conteúdo do arquivo e deixa você com um arquivo vazio sem precisar abri-lo em um editor, selecionar texto, qualquer um desses itens. Mais especificamente, o que ele faz é substituir o conteúdo do arquivo pelo conteúdo de "/ dev / null" ou nada. É bem liso, na verdade.

A única ressalva é que o usuário no qual você está conectado no momento deve ter permissão de gravação no arquivo.

Don Briggs
fonte
Obrigado pela resposta. Por favor, adicione um exemplo para que ele possa olhar mais bem + 1.
rɑːdʒɑ
5

Se um arquivo foi criado com o nome hello.txt e recebeu alguns textos, o comando abaixo no terminal ctrl+ alt+ tremoverá todo o texto no arquivo hello.txt ,

echo "" > hello.txt

insira a descrição da imagem aqui

Avinash Raj
fonte
Obrigado por responder, +1. expanda-o com algum exemplo, por favor, para que fique mais bonito.
rɑːdʒɑ
3

Outra abordagem - cpo /dev/nullpara o arquivo

xieerqi:$ cat testFile.txt                                                                                        
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1      115247656 83100492  26269816  76% /
none                   4        0         4   0% /sys/fs/cgroup
udev             2914492        4   2914488   1% /dev
tmpfs             585216     1152    584064   1% /run
none                5120        0      5120   0% /run/lock
none             2926072    98096   2827976   4% /run/shm
none              102400       76    102324   1% /run/user

xieerqi:$ cp /dev/null testFile.txt                                                                               

xieerqi:$ cat testFile.txt

xieerqi:$ 
Sergiy Kolodyazhnyy
fonte
você é um homem incrível!
precisa saber é o seguinte
2

Não é a resposta mais curta, mas ...

Esta resposta é baseada em outra da Superusuário . Embora não seja o comando bash mais curto, truncateé o mais legível para iniciantes comuns:

$ echo Hello > Hello.txt
$ echo World! >> Hello.txt
$ cat Hello.txt
Hello
World!
$ truncate -s 0 Hello.txt
$ ll Hello.txt
-rw-rw-r-- 1 rick rick 0 Mar 20 17:32 Hello.txt

Parâmetros usados ​​com o truncatecomando aqui:

  • "-s" define o tamanho
  • O tamanho "0" será zero

Limpar tudo, exceto os primeiros 10.000 bytes

Uma vantagem truncateé que você pode especificar quanto manter, não apenas zero:

$ truncate -s 10000 Hello.txt

... truncará tudo após os primeiros 10.000 bytes. Isso pode ser útil se um programa enlouquecer e despejar muitos megabytes de dados em um pequeno arquivo de log:

  • Execute o truncatecomando para um tamanho normal maior razoável de 10 K
  • Abra o arquivo com seu editor de texto e pressione End
  • Destaque e PgUpexclua os bytes restantes que não pertencem (geralmente reconhecíveis pelos caracteres ilegíveis ASCII).
WinEunuuchs2Unix
fonte
0

Então, vejo muitos redirecionamentos sendo usados ​​para responder a isso;)

Uma abordagem um pouco diferente com o combo: rm & touch

rm hello.txt && touch hello.txt

( sim ... mais uma fraude! )

Portanto, com este comando combinado, o arquivo hello.txt não foi aberto e, no final, você ainda tem o arquivo hello.txt em seu lugar, com o conteúdo limpo. Assim como você queria!

preciso
fonte
4
Não é um bom "truque" na minha opinião, ele pode alterar as permissões de arquivo ...
Parto
2
Isso pode ser melhor excluído. Isso pode levar a problemas: as permissões podem mudar. Se feito em um arquivo de log, poderá levar a um comportamento inesperado do serviço que espera que o log esteja lá e seja gravável.
Rinzwind
Embora esta resposta não seja a melhor maneira como ponto de interesse: Para corrigir os problemas com proprietário / permissão, verifique primeiro a propriedade e as permissões e depois acrescente (ajuste conforme necessário): && sudo chown user: group hello.txt && sudo chmod 644 hello.txt
Chris
O número do inode será excluído. um novo número de inode será criado. péssima ideia.
Dipankar Nalui
0
vi filename -c ':1,$d' -c ':wq'

funcionou melhor para mim por causa da permissão específica que tinha

Daniel
fonte
Você pode melhorar essa resposta elaborando o problema que teve. Você também pode explicar o que é o programa vie o que os vários parâmetros e argumentos fazem.
WinEunuuchs2Unix