J'ai bien compris l'effet des guillemets/double quotes sur les LF. C'est limpide. mais je crois que c'est un autre sujet.
Je pense avoir trouvé la solution, comme expliqué plus loin. Ce que j'ai essayé d'expliquer c'est que: - si la commande sed prend comme argument un nom de fichier, alors j'obtiens le résultat visé. - si j'utilise la variable TRUC qui contient la même valeur que le fichier, et bien je n'arrive pas à la donner à manger à la commande sed qui me lance un "No such file or directory" (ce qui suggère qu'lle attend un nom de fichier) Je reproduis mon exemple, avec les valeurs obtenues. $ DOMAIN=http://toto.com/ Rq : noter le / final dans mon exemple, et l'utilisation de monfichier Rq ; ci-dessous j'ai changé et utilisé monfichier ===== CECI FONCTIONNE $ sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' monfichier abc----- foo -> http://toto.com/foo bar -> http://toto.com/bar abc----- baz -> http://toto.com/baz $ RES=$(sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' monfichier) $ echo "$RES" abc----- foo -> http://toto.com/foo bar -> http://toto.com/bar abc----- baz -> http://toto.com/baz ===== MAIS CECI NE FONCTIONNE PAS A présent, mettons la chaîne multi-lignes à traiter dans une variable TRUC $ TRUC=$(cat monfichier) $ echo "$TRUC" abc----- foo bar abc----- baz $ RES=$(sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' "$TRUC") sed: can't read abc----- foo bar abc----- baz : No such file or directory: Idem avec : $ sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' "$TRUC" *** Je me dis donc qu'il faut donner à sed l'argument qu'il attend : cad un nom de fichier. Or, ce n'est pas le cas car je lui donne la valeur d'une variable. Et il me répond qu'il cherche à ouvrir un fichier qui n'existe pas "No such file or directory". *** Finalement, j'ai tenté d'utiliser un pipe ET CA MARCHE !!! RES=$(echo "$TRUC" | sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }') (pas de message d'erreur) $ echo "$RES" abc----- foo -> http://toto.com/foo bar -> http://toto.com/bar abc----- baz -> http://toto.com/baz Ça marche mais ne nous arrêtons pas là. Quelle explication rigoureuse peut-on donner de ce phénomène ? Merci Cordialement Roger ----- Mail original ----- De: "Marc Chantreux" <[email protected]> À: "roger tarani" <[email protected]> Cc: "Liste Debian" <[email protected]> Envoyé: Jeudi 4 Novembre 2021 19:06:30 Objet: Re: Récupérer le résultat d'une commande sed dans une variable ou un fichier : problème... Le Thu, Nov 04, 2021 at 05:18:00PM +0100, [email protected] a écrit : En préambule: <<. cat > monfichier abc----- foo bar abc----- baz . Maintenant je peux mettre en évidence l'importance des quotes dans l'interpolation: set $( grep -v abc monfichier ) echo $# argument dont le premier est $1 set "$( grep -v abc monfichier )" echo $# argument dont le premier est $1 RES=$( grep -v abc monfichier ) set $RES echo $# argument dont le premier est $1 set "$RES" echo $# argument dont le premier est $1 qui me donne: 3 argument dont le premier est foo 1 argument dont le premier est foo bar baz 3 argument dont le premier est foo 1 argument dont le premier est foo bar baz donc maintenant: DOMAIN=http://toto.com sed -rn "p ; /^abc/d ; s,.+, -> $DOMAIN/&,p" monfichier # CA marche DOMAIN=http://toto.com RES=$( sed -rn "p ; /^abc/d ; s,.+, -> $DOMAIN/&,p" monfichier ) echo "$RES" # CA marche DOMAIN=http://toto.com RES=$( sed -rn "p ; /^abc/d ; s,.+, -> $DOMAIN/&,p" monfichier ) echo $RES # ca marche pas mieux ? ou alors n'ai pas vraiment compris le problème ? -- Marc Chantreux Direction du numérique de l'Université de Strasbourg Pôle de Calcul et Services Avancés à la Recherche (CESAR) http://annuaire.unistra.fr/p/20200

