120 votes

Comment effacer du texte dans un fichier ?

Comment effacer le texte qui existait dans un fichier texte sans l'ouvrir ?

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

J'entends par là qu'il ne faut pas utiliser d'éditeur comme nano, Gedit, etc.

198voto

Zian Choy Points 1510

Ouvrez simplement votre terminal avec CTRL + ALT + T et tapez comme

 > hello.txt

c'est tout, vos données dans ce fichier seront effacées sans même l'ouvrir.

Exemple :

enter image description here

51voto

eradman Points 837

La façon la plus simple de tronquer un fichier est de rediriger la sortie de la commande no-op Shell ( : ) sur le fichier que vous voulez effacer.

: > hello.txt

24voto

Don Briggs Points 341

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

cat /dev/null > hello.txt

Cela supprime tout le contenu du fichier, et vous laisse avec un fichier vide sans avoir à l'ouvrir dans un éditeur, à sélectionner du texte, etc. Plus précisément, elle remplace le contenu du fichier par le contenu de "/dev/null", ou rien. C'est assez simple, en fait.

Le seul problème est que l'utilisateur sous lequel vous êtes actuellement connecté doit avoir le droit d'écrire sur ce fichier.

14voto

sourav c. Points 40637

Je vais également 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 . Cela effacera le fichier précédent. Si vous voulez jusqu'à cette quantité, c'est parfait.

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 l'ouvrir, mais vous pouvez également écrire quelques lignes avec un formatage approprié dans le fichier. Si vous souhaitez écrire "Ubuntu est le meilleur système d'exploitation" après avoir effacé le fichier, faites simplement

cat > hello.txt
Ubuntu is the 
best OS

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

Voir l'exemple :

enter image description here

6voto

Sergiy Kolodyazhnyy Points 97292

Une autre approche - cp le site /dev/null dans le 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:$ 

Pourquoi cela fonctionne-t-il et comment cela fonctionne-t-il ? Le site testFile.txt sera ouvert avec O_WRONLY|O_TRUNC ce qui signifie que si le fichier existe, il sera tronqué, c'est-à-dire que son contenu sera supprimé et sa taille mise à zéro. C'est le même drapeau avec lequel > dans Shell ouvre le fichier à droite de cet opérateur.

Suivant, cp tentera de lire à partir de /dev/null et après avoir lu 0 octet, fermera simplement les deux fichiers, laissant ainsi testFile.txt tronqué et le contenu effectivement supprimé.

Sachant cela, nous pourrions en théorie utiliser tout ce qui nous permet d'ouvrir un fichier avec O_TRUNC . Par exemple, ceci :

dd of=testFile.txt count=0

La petite différence ici est que dd n'effectuera aucune read() du tout. Gros avantage de ceci dd est qu'elle est portable POSIX. Le site spécifications du dd l'État :

Si la conversion seek= expr n'est pas également spécifiée, le fichier de sortie sera tronqué avant le début de la copie si un opérande explicite of= file est spécifié, à moins que conv= notrunc ne soit spécifié.

En revanche cp /dev/null testFile.txt n'est pas nécessairement portable, puisque Spécifications POSIX pour cp couvre ce qui se passe seulement si le fichier source est non-régulier et quand -r / -R sont spécifiés (un grand merci à Stephen Kitt pour l'avoir souligné), mais pas ce qui se passe lorsque -r o -R sont omises, ce qui est le cas ici. Cependant, il semble qu'au moins GNU cp utilise par défaut la règle 3 de la même spécification, qui consiste à tronquer le fichier existant sans changer son type.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X