Bonjour, 

Dans un script (bash 5.0.3(1), debian 10), je tente de récupérer le résultat 
d'une commande sed dans une variable. 

DOMAIN=http://toto.com/ 
sed '/^abc\|^$/! { p; s|^| -> '$DOMAIN'|g }' mon_fichier 

Dans la commande, le séparateur de la substitution est | car avec / il y a un 
conflit avec le / de la cariable DOMAIN 

J'ai tenté diverses expressions, comme par exemple dans une variable : 
RES=$( sed '/^abc\|^$/! { p; s|^| -> '$DOMAIN'|g }') 

ou en écrivant dans un fichier, avec une subsitution de commande ou sans : 
$(sed '/^abc\|^$/! { p; s|^| -> '"$DOMAIN"'|g }' "$RES" > mon_fichier) 

ou sans : 
$(sed '/^abc\|^$/! { p; s|^| -> '"$DOMAIN"'|g }' "$RES" > mon_fichier) 


Dans le script, je n'arrive pas du tout à obtenir le résultat escompté, tant 
via la variable que par le fichier : RIEN, même pas le résultat aplati/sans 
séparateur que j'obtiens en ligne de commande ci-dessous. 


En ligne de commande, j'obtiens exactement le résultat escompté sur stdout ou 
dans le fichier. 
foo 
bar 
baz 
truc 
machin 

TOUTEFOIS, il y a un indice pour la question posée. Quand je fais : 
echo $RES 

J'obtiens le résultat aplati, sans séparateur : 
foo bar baz truc machin 


J'ai écumé de nombreux forums où ce problème est soulevé. Sans trouver la clef. 

J'ai tenté de prende une valeur de DOMAIN sans / pour une expression de sed 
avec des / au lieu de | : idem. 

Quel mystère y a-t-il qui m'échapperait donc ? 
Je me dis qu'il y a une option de sed qui m'échappe ou une obscure histoire de 
contexte bash. 


Merci pour vos lumières/bougies/loupiotes ! 

Cordialement 
Roger 

Répondre à