Ecrire sans fichier temporaire [ksh] - Shell/Batch - Programmation
Marsh Posté le 30-06-2009 à 15:19:19
avec sed, normalement tu as une technique pour réécrire dans le même fichier... je sais plus ce que c'est, je cherche.
Marsh Posté le 30-06-2009 à 15:23:38
Code :
|
par contre c gnu donc ca doit pas marcher sur tous les systèmes. Dsl si j'ai enfoncé une porte ouverte.
Marsh Posté le 30-06-2009 à 15:28:15
J'ai oublié de préciser que le problème se pose surtout dans deux cas de figure :
- Avec le second fichier où je dois supprimer la dernière ligne, insérer la mienne, remettre la dernière.
- Et dans le cas où je dois supprimer ma ligne dans ces 2 fichiers, la suppression avec sed entraîne toujours la création d'un fichier temporaire.
Et je viens de regarder sous Solaris je n'ai pas l'option -i :\
Marsh Posté le 13-07-2009 à 11:24:52
Tonio94 a écrit : Bonjour, |
Intéressant. T'as le droit "w" sur le fichier mais pas sur le répertoire qui le contient.
Il y a une technique shell pour lire et écrire le même fichier sans passer par un fichier temporaire malheureusement elle nécessite d'avoir le droit d'effacement
Code :
|
Le rm -f est obligatoire car il permet de détacher logiquement le nom du fichier de ses data. Les data sont toujours dans le buffer 3 mais le nom ne leur sont plus associées. Et donc quand tu recrées le fichier via la redirection, le système lui attribue un nouvel ident et va y écrire les data.
Si tu ne fais pas de rm, alors le nom du fichier est toujours associé aux data et la redirection va les purger avant qu'elles ne soient lues et le buffer 3 ne contient alors plus rien.
D'où l'obligation impérative de pouvoir faire du rm.
Sinon désolé, je ne connais pas le perl...
Marsh Posté le 30-06-2009 à 15:10:55
Bonjour,
Dans un script en ksh (sous Solaris) j'ai besoin d'écrire une ligne dans 2 fichiers, le premier tout à la fin et le second à l'avant dernière ligne (en conservant la dernière).
Pas de soucis pour faire ça avec sed, le problème est qu'il me créé un fichier temporaire que je dois renommer avec le nom du bon fichier et donc supprimer le bon fichier.
Problème : Je n'ai pas les droits pour rm et pour mv. Je peux juste écrire dans le fichier. Alors j'aimerais pouvoir le faire avec un simple appel Perl (-i), si quelqu'un pouvait m'aider pour la syntaxe à utiliser.
Merci.