Wie lösche ich Text in einer Datei?

71

Wie lösche ich in einer Textdatei vorhandenen Text, ohne ihn zu öffnen?

Ich meine zum Beispiel, ich habe eine Datei wie hello.txtmit einigen Textdaten darin, und wie kann ich den gesamten Text in dieser Datei löschen, ohne sie zu öffnen?

Damit meine ich, keinen Editor wie Nano, Gedit usw. zu verwenden.

rɑːdʒɑ
quelle
1
Was meinst du mit 'Öffnen' einer Datei? In allen bisher gegebenen Antworten wird die Datei weiterhin von der Shell zum Schreiben geöffnet. Am Ende ist die Shell nur ein Programm wie jedes andere.
Jeff
@ Jeff nichts wie Nano, Gedit usw. verwenden
r --dʒɑ
Hus787 Ich habe nicht von dort eingegeben, wenn Sie denken, sonst begrüße ich Ihr Interesse an meiner Frage.
Donnerstag,
Ich bin mit Jeffs Kommentar einverstanden ... Auch ich bin der Meinung *, dass der Dateistream geöffnet werden muss, um darauf zu schreiben, unabhängig davon, ob Sie Texteditoren oder Umleitungen verwenden. ( * danke an alle, die Links vorschlagen, um bei der Sache zu helfen )
genau

Antworten:

139

Öffne einfach dein Terminal mit CTRL+ ALT+ Tund tippe als

 > hello.txt

Das war's, Ihre Daten in dieser Datei werden gelöscht, ohne sie zu öffnen.

Beispiel:

Bildbeschreibung hier eingeben

rɑːdʒɑ
quelle
5
Technisch wird die Datei geöffnet. Nur nicht in einem Editor.
John Dibling
2
@JohnDibling eigentlich ist dies umleitung, ich glaube datei wird hier nicht geöffnet. In Umleitung Der Inhalt von stdoutüberschreibt die vorhandene Datei, falls vorhanden. In diesem Fall gibt es nichts an stdout. Daher wird die Datei mit ungültigen Daten überschrieben, wobei im Wesentlichen alle vorherigen Daten gelöscht werden.
souravc
Gibt es eine Möglichkeit, diesen Befehl rückgängig zu machen?
Rao
@ Rao, wenn es ein großes wie> 10GB ist, kann sein. Aber inwieweit nicht sicher.
Freitag,
28

Der einfachste Weg, eine Datei zu kürzen, besteht darin, die Ausgabe des Shell-Befehls no-op ( :) auf die zu löschende Datei umzuleiten .

: > hello.txt
Eradman
quelle
2
Es ist wahrscheinlich nicht das einfachste (im Vergleich zu nur >), aber mit Sicherheit das schnellste. Ich frage mich, warum es in keiner der Antworten auf diese häufig gestellte Frage erwähnt wurde. Nehmen Sie hier +1.
heemayl
13

Ich werde auch die Umleitung wie die Antwort von rajagenupula verwenden. Es gibt aber etwas mehr Flexibilität. Öffnen Sie ein Terminal und geben Sie Folgendes ein:

cat > hello.txt

Und drücken Sie Ctrl+ C. Die vorherige Datei wird gelöscht. Wenn Sie so viel wollen, ist es in Ordnung.

Wenn Sie möchten, können Sie nach dem Löschen der Datei noch etwas tun. Auf diese Weise können Sie nicht nur eine Datei löschen, ohne sie zu öffnen, sondern auch einige Zeilen mit der richtigen Formatierung in die Datei schreiben. Angenommen, Sie möchten nach dem Löschen der Datei "Ubuntu ist das beste Betriebssystem" schreiben

cat > hello.txt
Ubuntu is the 
best OS

Drücken Sie dann Ctrl+ C. Jetzt wird die vorherige Datei gelöscht. Gleichzeitig stehen die Wörter in zwei Zeilen, wie ich sie ausdrückte.

Siehe das Beispiel:

Bildbeschreibung hier eingeben

souravc
quelle
Hey, danke für die Antwort. so wenig, aber die Arbeit, die gleich danach erledigt werden muss, ist auch noch interessant. + 1
Freitag,
>steht für Umleitung. cat > fileschreibt stdoutin die Datei und überschreibt alle vorhandenen Dateien.
souravc
10

Ich muss dies die ganze Zeit mit Protokolldateien tun. Der einfachste Weg, den ich gefunden habe, ist mit dem folgenden Befehl:

cat /dev/null > hello.txt

Dadurch wird der gesamte Inhalt der Datei gelöscht, und Sie haben eine leere Datei, ohne dass Sie diese in einem Editor öffnen müssen. Wählen Sie Text aus. Insbesondere wird der Inhalt der Datei durch den Inhalt von "/ dev / null" oder durch nichts ersetzt. Eigentlich ist es ziemlich glatt.

Die einzige Einschränkung ist, dass der Benutzer, als der Sie gerade angemeldet sind, Schreibrechte für diese Datei haben muss.

Don Briggs
quelle
Danke für die Antwort. Bitte fügen Sie ein Beispiel hinzu, damit es besser aussieht. + 1
Dienstag,
5

Wenn eine Datei mit dem Namen erstellt wurde hello.txt und wurde mit einigen Texten dann den folgenden Befehl im Terminal zur Verfügung gestellt ctrl+ alt+ twerden alle den Text in der entfernen hello.txt Datei,

echo "" > hello.txt

Bildbeschreibung hier eingeben

Avinash Raj
quelle
Vielen Dank für Ihre Antwort, +1. erweitere es bitte mit einem Beispiel, damit es schöner aussehen kann.
Donnerstag,
3

Ein weiterer Ansatz - cpdie /dev/nullauf die Datei

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
quelle
Du bist ein großartiger Mann!
Yasser Sinjab
2

Nicht die kürzeste Antwort, aber ...

Diese Antwort basiert auf einer anderen Antwort von Super User . Obwohl dies nicht der kürzeste Bash-Befehl ist, truncateist er für durchschnittliche Neulinge am besten lesbar:

$ 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

Parameter, die mit dem truncateBefehl hier verwendet werden:

  • "-s" legt die Größe fest
  • Die Größe "0" ist Null

Löschen Sie alles außer den ersten 10.000 Bytes

Ein Vorteil von truncateist, dass Sie angeben können, wie viel aufbewahrt werden soll, und nicht nur Null:

$ truncate -s 10000 Hello.txt

... schneidet alles nach den ersten 10.000 Bytes ab. Dies kann nützlich sein, wenn ein Programm durchgedreht ist und viele Megabyte Daten in eine kleine Protokolldatei geschrieben hat:

  • Führen Sie den truncateBefehl für eine vernünftig größere normale Größe von 10 KB aus
  • Öffnen Sie die Datei mit Ihrem Texteditor und drücken Sie End
  • Markieren Sie und PgUp, um die verbleibenden Bytes zu löschen, die nicht dazu gehören (normalerweise erkennbar an ASCII-Garbage-Zeichen).
WinEunuuchs2Unix
quelle
0

Ich sehe also eine Menge Weiterleitungen, um dies zu beantworten;)

Ein etwas anderer Ansatz mit der Combo: rm & touch

rm hello.txt && touch hello.txt

( Ja ... noch ein Betrüger! )

Mit dieser Befehlskombination wurde also die Datei hello.txt nicht geöffnet und am Ende haben Sie immer noch die Datei hello.txt an ihrer Stelle, deren Inhalt gelöscht wurde. So wie du es wolltest!

präzise
quelle
4
Meiner Meinung nach kein guter "Betrüger", er kann die Dateiberechtigungen ändern ...
Parto
2
Dies könnte besser gelöscht werden. Dies kann zu Problemen führen: Berechtigungen können sich ändern. Wenn eine Protokolldatei erstellt wird, kann dies zu unerwartetem Verhalten des Dienstes führen, der erwartet, dass das Protokoll vorhanden und beschreibbar ist.
Rinzwind
Diese Antwort ist nicht der beste Weg, um das Problem zu beheben: Um das Problem mit dem Eigentümer / der Berechtigung zu beheben, überprüfen Sie zuerst den Besitz und die Berechtigungen und hängen Sie diese an (passen Sie sie nach Bedarf an): && sudo chown user: group hello.txt && sudo chmod 644 hello.txt
Chris
Die Inode-Nummer wird gelöscht. Eine neue Inode-Nummer wird erstellt. schlechte Idee.
Dipankar Nalui,
0
vi filename -c ':1,$d' -c ':wq'

arbeitete am besten für mich wegen der besonderen Erlaubnis, die es hatte

Daniel
quelle
Sie können diese Antwort verbessern, indem Sie auf das Problem eingehen, das Sie hatten. Sie können auch erklären, was das Programm viist und was die verschiedenen Parameter und Argumente bewirken.
WinEunuuchs2Unix