[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Récupérer le résultat d'une commande sed dans une variable ou un fichier : problème...



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 
  -> http://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" <bernard.schoenacker@free.fr>
À: "roger tarani" <roger.tarani@free.fr>
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" <roger.tarani@free.fr>
À: "Liste Debian" <debian-user-french@lists.debian.org>
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


Reply to: