Oui, en effet, je voulais faire ça : donner la valeur d'une variable à manger à 
sed. 
Et je n'ai même pas de fichier mais une variable à traiter. 
J'avais créé un fichier pour tenter de débloquer la situation avec une 
situation plus connue avec sed. 

TRUC est fournie par un traitement précédent du script. 
Et dans le script, j'obtiens RES ainsi : 
RES=$(echo "$TRUC" | sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }') 

Comment expliquer que la commande prend un fichier comme argument : 
sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' monfichier #SUCCES 

mais refuse de prendre la valeur d'une variable ? 
sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' "$TRUC" #ECHEC 

J'ai du mal à discerner la cause exacte. 
Est-ce une simple erreur de type ? 
Par exemple, l'argument est un fichier qui contient une chaîne de caractère Vs 
une chaîne de caractère d'une variable. 

Merci encore 

De: "Marc Chantreux" <[email protected]> 
À: "roger tarani" <[email protected]> 
Cc: "Liste Debian" <[email protected]> 
Envoyé: Jeudi 4 Novembre 2021 22:09:11 
Objet: Re: Récupérer le résultat d'une commande sed dans une variable ou un 
fichier : problème... 



$ TRUC=$(cat monfichier) 
$ 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 }') 



ben ... ok j'étais loin de m'imaginer que tu voulais vraiment filer le 
contenu d'une variable comme argument de sed mais oui en reprenant tes 
mails: c'était bien noté :( 

sed (comme beaucoup de filtres) une liste de fichiers a traiter en 
argument (ou alors stdin par defaut) 

au passage du coup: 

TRUC=$( cat monfichier ) 
RES=$(echo "$TRUC" | sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }') 

s'écrit en fait 

sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' monfichier 

ou si tu veux utiliser les redirections pour avoir le nom du fichier 
devant (c'est plus simple à la relecture) 

< monfichier sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' 

-- 
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 

Répondre à