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.


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


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

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


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.


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


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:$ 

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).

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!


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


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
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.