Pb avec sed [SCRIPT UNIX] - Shell/Batch - Programmation
Marsh Posté le 26-10-2006 à 19:17:43
sylvainleleu a écrit : Voici le script en question :
|
Cette structure pose un gros problème car le "for" utilise l'espace comme séparateur. Et dans le cas où un des fichiers possède un espace dans son nom, le "for" fera alors 2 itérations en découpant le nom sur la 1ère partie puis la 2° partie mais aucune itération ne traitera le fichier lui-même. Au final, il restera non traité
Solution permettant d'éviter cela: utiliser le "read" qui se base sur le "return" pour découper ses infos.
ls $REP_SOURCE |while read FICHIER |
Inconvénient: comme le pipe génère un sous-processus, si on implémente une variable (style un compteur) dans le "do", elle est perdue en fin de "done" car le processus disparaît et ses variables avec...
Marsh Posté le 27-10-2006 à 13:42:30
Sve@r a écrit : Solution permettant d'éviter cela: utiliser le "read" qui se base sur le "return" pour découper ses infos
|
Ceci ne résout pas tous les problèmes car read supprime tous les espaces en début et en fin de ligne.
Une solution est de forcer le séparateur de champ IFS au moment de la lecture (fonctionne trés bien en KSH, à vérifier en SH et BASH) :
ls $REP_SOURCE |while IFS= read FICHIER |
Sve@r a écrit : Inconvénient: comme le pipe génère un sous-processus, si on implémente une variable (style un compteur) dans le "do", elle est perdue en fin de "done" car le processus disparaît et ses variables avec... |
Ce problème est résolu par KSH, et je pense qu'il en est de même avec BASH.
Marsh Posté le 28-10-2006 à 19:10:20
aigles a écrit : Ceci ne résout pas tous les problèmes car read supprime tous les espaces en début et en fin de ligne |
Et en quoi est-ce un problème dans ce cas précis ? Peut-on avoir des fichiers dont le nom contient un espace en début ou fin ???
aigles a écrit : Ce problème est résolu par KSH, et je pense qu'il en est de même avec BASH. |
Absolument pas. Il est vrai qu'en ksh une variable déclarée dans le do... done est automatiquement remontée au-dessus du pipe mais ce comportement n'a pas été répliqué dans le sh ou bash Peut-être zsh...
Marsh Posté le 20-10-2006 à 09:58:19
Voici le script en question :
et ce qu'il donne :
Je ne vois pas pourqui sed me fait une erreur alors que si je tape
sed -e 's/VANCOUV_LAS_UNFR_080/IMP-1657/g' /opt/adobe/central/server/tmp/3 > /opt/adobe/central/server/tmp/3.dat
en ligne de commande cela passe sans pb.
Merci de votre aide.