Shell : redirection de fichier

Résolu/Fermé
ibliss11 Messages postés 49 Date d'inscription lundi 30 mars 2009 Statut Membre Dernière intervention 2 juillet 2012 - 22 nov. 2010 à 17:01
ibliss11 Messages postés 49 Date d'inscription lundi 30 mars 2009 Statut Membre Dernière intervention 2 juillet 2012 - 23 nov. 2010 à 07:50
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
22 nov. 2010 à 17:29
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 lundi 30 mars 2009 Statut Membre Dernière intervention 2 juillet 2012
22 nov. 2010 à 18:10
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
22 nov. 2010 à 18:23
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 lundi 30 mars 2009 Statut Membre Dernière intervention 2 juillet 2012
22 nov. 2010 à 18:52
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
22 nov. 2010 à 18:57
: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 lundi 30 mars 2009 Statut Membre Dernière intervention 2 juillet 2012
23 nov. 2010 à 07:43
Mille mercis
0
ibliss11 Messages postés 49 Date d'inscription lundi 30 mars 2009 Statut Membre Dernière intervention 2 juillet 2012
23 nov. 2010 à 07:50
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