Come cancellare il testo in un file?


71

Come cancellare il testo esistente in un file di testo senza aprirlo?

Voglio dire, ad esempio, ho un file come hello.txtcon alcuni dati di testo in esso, e come posso cancellare il testo totale in quel file senza aprirlo?

Con questo, intendo non usare nessun editor come nano, Gedit, ecc.


1
Cosa intendi con "apertura" di un file? In tutte le risposte fornite finora il file sarà ancora aperto per la scrittura dalla shell. Alla fine la shell è solo un programma come un altro.
Jeff,

@Jeff non usa niente come nano, gedit ecc.
1313

Hus787 Non ho scritto da come arrivarci se la pensi così altrimenti accolgo con favore il tuo interesse per la mia domanda.
rʒɑdʒɑ

Sono d'accordo con il commento di Jeff ... Anche io ho un'opinione * che il flusso di file deve essere aperto per scrivere su di esso, sia che tu utilizzi un editor di testo o il reindirizzamento. ( * apprezzo chiunque suggerisca collegamenti per aiutare con la questione )
preciso il

Risposte:


139

Basta aprire il terminale con CTRL+ ALT+ Te digitare come

 > hello.txt

il gioco è fatto, i tuoi dati in quel file verranno cancellati senza aprirlo uniformemente.

Esempio:

inserisci qui la descrizione dell'immagine


5
Tecnicamente il file verrà aperto. Solo non in un editor.
John Dibling,

2
@JohnDibling in realtà questo è il reindirizzamento, credo che il file non venga aperto qui. Nel reindirizzamento Il contenuto di stdoutsovrascrive l'eventuale file esistente. In questo caso non c'è nulla a stdout. Quindi il file viene sovrascritto con vuoto, essenzialmente cancellando eventuali dati precedenti.
souravc,

C'è un modo per annullare questo comando?
Rao,

@Rao, se è grande come> 10 GB, potrebbe essere. Ma fino a che punto non sono sicuro.
rʒɑdʒɑ

28

Il modo più semplice è di troncare un file è di reindirizzare l'output del comando no-op della shell ( :) sul file che si desidera cancellare.

: > hello.txt

2
Probabilmente non è il più semplice (relativamente al solo >) ma sicuramente il più veloce..mi chiedo perché non sia stato menzionato in nessuna delle risposte di questa domanda molto
vista..qui

13

Userò anche il reindirizzamento come la risposta di rajagenupula. Ma c'è un po 'più di flessibilità. Apri un terminale e digita,

cat > hello.txt

E premi Ctrl+ C. Cancella il file precedente. Se vuoi così tanto va bene.

Se lo desideri, puoi fare qualcosa di più dopo aver cancellato il file. In questo modo non solo puoi cancellare un file senza aprirlo, ma puoi anche scrivere alcune righe con una formattazione corretta nel file. Di 'che desideri scrivere "Ubuntu è il miglior sistema operativo" dopo aver cancellato il file, basta farlo

cat > hello.txt
Ubuntu is the 
best OS

Quindi premere Ctrl+ C. Ora il file precedente viene cancellato. Allo stesso tempo le parole sono presenti in due righe mentre le inserisco.

Vedi l'esempio:

inserisci qui la descrizione dell'immagine


ehi grazie per aver risposto. così poco, ma il lavoro da fare subito dopo anche quello, ma comunque interessante. + 1
rɑːdʒɑ

>sta per reindirizzamento. cat > filescriverà stdoutsul file, sovrascrivendo qualsiasi file esistente.
Souravc,

10

Devo farlo sempre con i file di registro. Il modo più semplice che ho trovato è con il seguente comando:

cat /dev/null > hello.txt

Questo elimina tutto il contenuto del file e ti lascia con un file vuoto senza doverlo aprire in un editor, selezionare il testo, nessuna di quelle cose. Più specificamente, ciò che fa è sostituire il contenuto del file con il contenuto di "/ dev / null", o niente. È piuttosto elegante, in realtà.

L'unica avvertenza è che l'utente al quale è stato effettuato l'accesso deve disporre dell'autorizzazione di scrittura per tale file.


Grazie per la risposta. Aggiungi un esempio in modo che
appaia

5

Se un file è stato creato con il nome hello.txt ed è stato fornito con alcuni testi, il comando seguente nel terminale ctrl+ alt+ trimuoverà tutto il testo nel file hello.txt ,

echo "" > hello.txt

inserisci qui la descrizione dell'immagine


Grazie per aver risposto, +1. espanderlo con qualche esempio per favore in modo che possa essere più bello.
rʒɑdʒɑ

3

Un altro approccio: cpil /dev/nullal file

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

sei un uomo fantastico!
Yasser Sinjab,

2

Non la risposta più breve ma ...

Questa risposta si basa su un'altra di Super User . Sebbene non sia il comando bash più breve, truncateè il più leggibile per i neofiti medi:

$ 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

Parametri utilizzati con il truncatecomando qui:

  • "-s" imposta la dimensione
  • La dimensione "0" sarà zero

Cancella tutto tranne i primi 10.000 byte

Un vantaggio truncateè che puoi specificare quanto mantenere, non solo zero:

$ truncate -s 10000 Hello.txt

... troncherà tutto dopo i primi 10.000 byte. Questo potrebbe essere utile se un programma impazzisse e scaricasse molti Megabyte di dati in un piccolo file di registro:

  • Esegui il truncatecomando per una dimensione normale ragionevolmente più grande di 10 K.
  • Apri il file con l'editor di testo e premi End
  • Evidenziare ed PgUpeliminare i byte rimanenti che non appartengono (di solito riconoscibili dai caratteri di immondizia ASCII).

0

Quindi, vedo molti reindirizzamenti utilizzati per rispondere a questo;)

Un approccio leggermente diverso con la combo: rm & touch

rm hello.txt && touch hello.txt

( sì ... l'ennesimo imbroglio! )

Quindi con questo comando combo il file hello.txt non è stato aperto e alla fine hai ancora il file hello.txt al suo posto con i contenuti cancellati. Proprio come volevi!


4
A mio avviso, non è un buon "imbroglio", può cambiare i permessi dei file ...
Parto

2
Questo potrebbe essere meglio di cancellato. Può portare a problemi: le autorizzazioni possono cambiare. Se eseguito su un file di registro, può comportare un comportamento imprevisto da parte del servizio che prevede che il registro sia presente e sia scrivibile.
Rinzwind,

Sebbene questa risposta non sia il modo migliore come punto di interesse: per correggere i problemi con il proprietario / autorizzazione, controlla prima la proprietà e le autorizzazioni, quindi aggiungi questo (modifica come richiesto): && sudo chown user: group hello.txt && sudo chmod 644 hello.txt
Chris,

il numero dell'inode verrà cancellato. verrà creato un nuovo numero di inode. cattiva idea.
Dipankar Nalui,

0
vi filename -c ':1,$d' -c ':wq'

ha funzionato al meglio per me grazie al particolare permesso che aveva


Puoi migliorare questa risposta elaborando il problema che hai avuto. Inoltre potresti spiegare cos'è il programma vie cosa fanno i vari parametri e argomenti.
WinEunuuchs2Unix
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.