La solution de Frédéric est très bien. Je la complète par quelques remarques:
Il faut valider les données. (Frédéric l'a dit, mais on ne le répète jamais assez!)
Cas particulier de 1., ta fonction de remplacement ne marche plus si ton entrée contient un caractère /.
SED permet d'utiliser un autre caractère que / pour délimiter ses opérandes, si ton entrée peut contenir tout type de caractères imprimables, le mieux est d'utilsier un caractère… non-imprimable! Par exemple ^A (ASCII 1, obtenu par C-q C-a dans Emacs).
Je suppose que tu fais un remplacement pour chaque variable. SED peut réaliser plusieurs opérations (avec l'option -e) ce qui te permettrait d'économiser des appels, au prix de quelques acrobaties avec les variables du shell. Une autre méthode permettant de ne faire qu'un seul appel à SED consiste à générer un script SED (paramètre -f de SED), par exemple à partir d'un HERE-DOC. C'est très pratique parceque les variables sont remplacées dans les HERE-DOC
Les HERE-DOCs sont une fonction très pratique (car on peut les piper) du shell, souvent sous-estimée.
Quitte à faire du HERE-DOC, on peut aussi envisager de produire directement le fichier $SPOOLDIR/after-import-$COMMUNAUTE.sql avec un HERE-DOC, comme dans
La convention dans les scripts shell est plutôt d'utiliser la majuscules pour les variables d'environnement et les minuscules pour les variables du script. Ça évite notamment de modifier l'environnement par erreur.
La mise-en page de mon commentaire avec Mark-Down est pas super.
# Quelques suggestions
Posté par Michaël (site web personnel) . En réponse au message Traitement par lot et sed. Évalué à 5.
La solution de Frédéric est très bien. Je la complète par quelques remarques:
Il faut valider les données. (Frédéric l'a dit, mais on ne le répète jamais assez!)
Cas particulier de 1., ta fonction de remplacement ne marche plus si ton entrée contient un caractère
/.SED permet d'utiliser un autre caractère que
/pour délimiter ses opérandes, si ton entrée peut contenir tout type de caractères imprimables, le mieux est d'utilsier un caractère… non-imprimable! Par exemple^A(ASCII 1, obtenu par C-q C-a dans Emacs).Je suppose que tu fais un remplacement pour chaque variable. SED peut réaliser plusieurs opérations (avec l'option
-e) ce qui te permettrait d'économiser des appels, au prix de quelques acrobaties avec les variables du shell. Une autre méthode permettant de ne faire qu'un seul appel à SED consiste à générer un script SED (paramètre-fde SED), par exemple à partir d'un HERE-DOC. C'est très pratique parceque les variables sont remplacées dans les HERE-DOCLes HERE-DOCs sont une fonction très pratique (car on peut les piper) du shell, souvent sous-estimée.
La convention dans les scripts shell est plutôt d'utiliser la majuscules pour les variables d'environnement et les minuscules pour les variables du script. Ça évite notamment de modifier l'environnement par erreur.
La mise-en page de mon commentaire avec Mark-Down est pas super.
Il faut valider les données.
XKCD: Exploits of a MOM