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

