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
$ RES=$(sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' monfichier)
$ echo "$RES"
===== 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"
Ça marche mais ne nous arrêtons pas là.
Quelle explication rigoureuse peut-on donner de ce phénomène ?
Merci
Cordialement
Roger
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...