Shell : redirection de fichier

Résolu
ibliss11 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -  
ibliss11 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Il y a quelque chose qui m'échappe depuis un moment déjà : pourquoi, lorsqu'on redirige la sortie d'une opération d'un fichier sur lui même, le fichier s'efface-t-il ?

Par exemple :

sort monfichier > monfichier


Merci d'avance à ceux qui répondront ou juste liront ce message.


A voir également:

6 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Parce que ">" redirige la sortie standard vers un fichier (et l'écrase par conséquence).
Alors que ">>" redirige la sortie standard vers un fichier en concaténant le tout (ajout).

;-))
0
ibliss11 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour votre réponse.

Jusque là je comprends.

Ce que je ne comprends pas c'est pourquoi le fichier devient vide après ce type de commande.
Si il y a redirection de la sortie standard alors monfichier devrait contenir le résultat de la commande, hors il est vide et toutes les données sont perdues.

Plus précisement, hier je cherchais à remplacer tous les sauts de ligne d'un fichier par des espaces.
Comme je n'y arrivais pas avec sed j'ai utilisé tr.
J'ai essayé cette commande :

 cat monFichier | tr -s '\n' ' ' > monFichier


mais elle ne donne rien.
J'ai du ****** quelque part.

Avez vous une idée ?
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
La redirection (en sortie) vers le fichier d'entrée n'est jamais souhaitable ;-((

Avec "sed" :

sed  -i.bak ':z;N;$! bz;s/\n/ /g'  fichier
0
ibliss11 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
D'accord, c'est noté.
Je vais l'écrire en rouge au dessus de mon lit.

En tout cas la commande marche, je n'ai plus qu'à la comprendre maintenant.

Merci beaucoup zipe31.

À bientôt pour de nouvelles aventures.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
:z
Étiquette

N
On ajoute la ligne suivante dans l'espace de travail

$ !b z
Dernière ligne du fichier ($) différente (!) ? On se branche (b) à l'étiquette (:z) et on recommence...

s/\n/ /g
Quand on a atteint la dernière ligne, on exécute la substitution, à savoir : remplacer toutes (g) les fins de ligne (\n) par un espace

;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ibliss11 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
Mille mercis
0
ibliss11 Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
D'autant plus qu'une fois encore j'aurais pu trouver tout seul :

https://forums.commentcamarche.net/forum/affich-37620122-sed-introduction-a-sed-part-iii

Désolé d'avoir entamé votre crédit patience de la semaine.

Merci encore.
0