Bonjour, 

Il s'agit d'imprimer la ligne, puis d'insérer une copie de la ligne en insérant 
au début de chaque ligne " -> " et la chaîne suivante 
DOMAIN=http://toto.com/ 
Chaque ligne contient un nom de fichier 

$ cat mon_fichier 
foo 
bar 
baz 
truc 
machin 


Il s'agit d'obtenir ceci 
$ cat mon_fichier_resultat 
foo 
-> http://toto.com/foo 
bar 
-> http://toto.com/ bar 
baz 
-> http://toto.com/ baz 
truc 
-> http://toto.com/ truc 
machin 
-> h ttp://toto.com/ machin 

D'où la commande sed qui 
va ignorer les lignes commençant par abc ou les lignes vides : 
/^abc\|^$/! 
... et sur les autres lignes va imprimer le PS/pattern space, 
puis effectuer la substitution convoitée, AVEC un caractère | et non avec / 
comme d'habitude car DOMAIN contient des / et cela ne permet pas à la commande 
sed s/old/new/g de fonctionner ) 
{ p; s|^| -> '$DOMAIN'|g } 
ou de préférence (même si la précédente sans les guillemets fonctionne) 
{ p; s|^| -> '"$DOMAIN"'|g } 

Utiliser grep ? 
Je ne cherche pas un mot dans un fichier mais je cherche à ignorer les lignes 
commençant pas abc et les lignes vides, puis à faire le traitement décrit 
(conserver la ligne et insérer la ligne avec une substitution) 
Je ne vois pas bien comment faire avec grep ? 

Merci à toi 

Cordialement 
Roger 



De: "Bernard Schoenacker" <[email protected]> 
À: "roger tarani" <[email protected]> 
Envoyé: Jeudi 4 Novembre 2021 04:12:30 
Objet: Re: Récupérer le résultat d'une commande sed dans une variable ou un 
fichier : problème... 

Bonjour Roger, 

en premier il ne faut pas prendre l'adresse complète, mais 
simplement "domain.tld" autrement tu seras contraint d'écrire 
l'adresse complète en incluant les caractères d'échappement 
après "http:// " 

Ensuite, pourrais-tu expliquer ce que tu souhaites réellement 
obtenir à la fin, car c'est un peu confus et j'ai l'impression 
que tu as fait un copié coller de scripts glané de ci et delà 
sans avoir réussi à comprendre la syntaxe .... 

pour l'url : 

http\:/\/\domain\.com 

désolé, mais je suis complètement rouillé et je conseille de relire la façon 
d'écrire une url dans la doc de procmail .... 

En solution annexe pourquoi ne pas vouloir employer grep ? 

Merci pour ton aimable attention 

Bien à toi 

Bernard 





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

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 à