Comment effacer du texte dans un fichier?

71

Comment effacer un texte existant dans un fichier texte sans l'ouvrir?

Je veux dire par exemple que j'ai un fichier hello.txtavec des données textuelles, et comment puis-je effacer le texte total dans ce fichier sans l'ouvrir?

Par cela, je veux dire ne pas utiliser d’éditeur tel que nano, Gedit, etc.

rɑːdʒɑ
la source
1
Qu'entendez-vous par «ouvrir» un fichier? Dans toutes les réponses données jusqu’à présent, le fichier sera toujours ouvert pour l’écriture par le shell. En fin de compte, le shell n'est qu'un programme comme un autre.
Jeff
@ Jeff n'utilisant rien de tel que nano, gedit, etc.
vendredi
Hus787 Je n'ai pas tapé le mot pour y arriver si vous pensez, sinon je me réjouis de l'intérêt que vous portez à ma question.
rɑːdʒɑ
Je suis d'accord avec le commentaire de Jeff ... Moi aussi, j'ai l'opinion * que le flux de fichiers doit être ouvert pour y écrire, que vous utilisiez un éditeur de texte ou une redirection. ( * appréciez toute personne suggérant des liens pour aider avec la matière )
précise

Réponses:

139

Ouvrez simplement votre terminal avec CTRL+ ALT+ Tet tapez comme

 > hello.txt

ça y est, vos données dans ce fichier seront effacées sans même les ouvrir.

Exemple:

entrez la description de l'image ici

rɑːdʒɑ
la source
5
Techniquement, le fichier sera ouvert. Juste pas dans un éditeur.
John Dibling
2
@JohnDibling en fait c'est une redirection, je crois que le fichier n'est pas ouvert ici. En redirection Le contenu de stdoutécrase le fichier existant, le cas échéant. Dans ce cas, il n'y a rien à stdout. Donc, le fichier est écrasé par void, ce qui efface essentiellement les données précédentes, le cas échéant.
Souravc
Est-il possible d'annuler cette commande?
Rao
@Rao, si c'est un gros comme> 10 Go, peut être. Mais dans quelle mesure pas sûr.
Samedi
28

Le moyen le plus simple de tronquer un fichier consiste à rediriger la sortie de la commande no-op du shell ( :) vers le fichier que vous souhaitez effacer.

: > hello.txt
Eradman
la source
2
Ce n'est probablement pas le plus facile (par rapport à juste >), mais le plus rapide à coup sûr..je me demande pourquoi cela n'a pas été mentionné dans les réponses de cette question très regardée..ici, prenez +1 ..
heemayl
13

Je vais aussi utiliser la redirection comme la réponse de Rajagenupula. Mais il y a un peu plus de flexibilité. Ouvrez un terminal et tapez,

cat > hello.txt

Et appuyez sur Ctrl+ C. Il effacera le fichier précédent. Si vous en voulez autant, c'est bien.

Si vous le souhaitez, vous pouvez faire quelque chose de plus après avoir effacé le fichier. De cette façon, non seulement vous pouvez effacer un fichier sans ouvrir, mais vous pouvez également écrire quelques lignes avec une mise en forme appropriée dans le fichier. Supposons que vous souhaitiez écrire "Ubuntu est le meilleur système d'exploitation" après avoir effacé le fichier.

cat > hello.txt
Ubuntu is the 
best OS

Puis appuyez sur Ctrl+ C. Maintenant, le fichier précédent est effacé. En même temps, les mots sont en deux lignes comme je les ai mis.

Voir l'exemple:

entrez la description de l'image ici

souravc
la source
hé merci d'avoir répondu. si peu mais travail à faire juste après et aussi mais toujours intéressant. + 1
rɑːdɑː
>représente la redirection. cat > fileécrira stdoutdans un fichier en écrasant tout fichier existant.
Souravc
10

Je dois le faire tout le temps avec les fichiers journaux. Le moyen le plus simple que j'ai trouvé est d'utiliser la commande suivante:

cat /dev/null > hello.txt

Ceci supprime allo du contenu du fichier et vous laisse avec un fichier vide sans avoir à l'ouvrir dans un éditeur, sélectionnez du texte, aucun de ces éléments. Plus précisément, il remplace le contenu du fichier par le contenu de "/ dev / null" ou rien. C'est assez lisse, en fait.

Le seul inconvénient est que l'utilisateur avec lequel vous êtes actuellement connecté doit avoir le droit d'écriture sur ledit fichier.

Don Briggs
la source
Merci pour la réponse. S'il vous plaît ajouter un exemple afin qu'il puisse ressembler plus joliment. + 1
rɑːdʒɑ
5

Si un fichier a été créé avec le nom hello.txt et a été fourni avec des textes, la commande ci-dessous dans terminal ctrl+ alt+ tsupprimera tout le texte du fichier hello.txt ,

echo "" > hello.txt

entrez la description de l'image ici

Avinash Raj
la source
Merci d'avoir répondu, +1. agrandissez-le avec un exemple s'il vous plaît pour qu'il soit plus beau.
rɑːdʒɑ
3

Une autre approche - cple /dev/nullau fichier

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
la source
tu es un homme génial!
Yasser Sinjab
2

Pas la réponse la plus courte mais ...

Cette réponse est basée sur une autre de Super User . Bien que ce ne soit pas la commande la plus courte, truncatec'est la plus lisible pour les débutants:

$ 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

Paramètres utilisés avec truncatecommande ici:

  • "-s" définit la taille
  • "0" taille sera zéro

Effacer tout sauf les 10 000 premiers octets

Un avantage truncateest que vous pouvez spécifier combien il faut garder, pas seulement zéro:

$ truncate -s 10000 Hello.txt

... tout tronquer après les 10 000 premiers octets. Cela pourrait être utile si un programme devenait fou et sauvegardait plusieurs mégaoctets de données dans un petit fichier journal:

  • Exécutez la truncatecommande pour une taille normale plus grande raisonnable de 10 Ko
  • Ouvrez le fichier avec votre éditeur de texte et appuyez sur End
  • Mettez en surbrillance et PgUpsupprimez les octets restants qui n’appartiennent pas (généralement reconnaissables par des caractères incohérents ASCII).
WinEunuuchs2Unix
la source
0

Donc, je vois beaucoup de redirections utilisées pour répondre à cette question;)

Une approche légèrement différente avec le combo: rm & touch

rm hello.txt && touch hello.txt

( ouais ... encore un tricheur! )

Donc avec cette commande combo le fichier hello.txt n'a pas été ouvert et à la fin vous avez toujours le fichier hello.txt à sa place avec le contenu effacé. Juste comme tu voulais!

précis
la source
4
Pas un bon "tricheur" à mon avis, cela peut changer les permissions des fichiers ...
Parto
2
Cela pourrait être mieux de supprimé. Cela peut entraîner des problèmes: les permisions peuvent changer. Si cela est fait sur un fichier journal, cela peut entraîner un comportement inattendu du service qui s'attend à ce que le journal soit présent et accessible en écriture.
Rinzwind
Bien que cette réponse ne soit pas la meilleure solution en tant que point d’intérêt: Pour résoudre les problèmes de propriétaire / autorisation, vérifiez d’abord la propriété et les autorisations, puis ajoutez-le (ajustez si nécessaire): && sudo utilisateur chown: groupe hello.txt && sudo chmod 644 hello.txt
Chris
Le numéro d'inode sera supprimé. un nouveau numéro d'inode sera créé. mauvaise idée.
Dipankar Nalui le
0
vi filename -c ':1,$d' -c ':wq'

a fonctionné au mieux pour moi à cause de la permission particulière qu’il avait

Daniel
la source
Vous pouvez améliorer cette réponse en décrivant le problème que vous avez rencontré. Vous pouvez également expliquer en quoi viconsiste le programme et ce que font les différents paramètres et arguments.
WinEunuuchs2Unix