Bonjour,
Bien compris en ce qui concerne les LF. Merci pour ce rappel utile ( echo "$A"
ou echo "${A}" )
( DOMAIN contient la valeur [ http://toto.com/ | http://toto.com/ ] )
Ceci fonctionnne ;
$ sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' mon_fichier
(affiche le résultat visé)
$ RES=$(sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' mon_fichier)
$ echo "$RES"
(affiche le résultat visé)
A présent, mettons la chaîne multi-lignes à traiter dans une variable TRUC
$ TRUC=$(cat mon_fichier)
$ echo "$TRUC"
(affiche le texte à traiter)
$ RES=$(sed '/^abc\|^$/! { p; s|^| -> '"${DOMAIN}"'|g }' "$TRUC")
sed: can't read
( affiche le texte à traiter ): No such file or directory:
L a commande sed est correcte et c ela semble indiquer que le problème à
résoudre est le suivant :
Quelle est la syntaxe à respecter pour l' argument de sed, cad non pas un nom
de fichier (qui contient la chaîne à traiter), mais une variable , ici TRUC
(qui contient la chaîne à traiter) ?...
Merci
cordialement
RT
De: "Pierre Malard" <[email protected]>
À: "roger tarani" <[email protected]>
Cc: "Liste Debian" <[email protected]>
Envoyé: Jeudi 4 Novembre 2021 07:59:18
Objet: Re: Récupérer le résultat d'une commande sed dans une variable ou un
fichier : problème...
Bonjour,
C’est normal avec l’affichage d’une variable contenant des LF. Ce serait la
même chose avec un :
A=$(ls)
Une piste tient dans la façon que vous utilisez pour afficher le résultat de la
variable. En effet, un
echo ${A}
comme vous le faite n’affichera pas la même chose qu’un :
echo "${A}"
Faite l’essai, enclore une variable avec des double-guillemets est souvent non
seulement plus clair et ne provoque pas une interprétation supplémentaire par
le BASH.
En plus l’utilisation des accolades est aussi un moyen d’éviter les ambiguïtés
:
${A}B
n’est pas forcément la même chose que :
${AB}
ou $AB
Le 4 nov. 2021 à 02:49, [ mailto:[email protected] | [email protected] ]
a écrit :
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/ | 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
--
Pierre Malard
« On ne peut pas pousser à fond l'éducation politique et l'éducation
tout court de masses sans l'accompagner d'un développement
économique, culturel et social parallèle. »
Romain Gary - "Les racines du ciel"
|\ _,,,---,,_
/,`.-'`' -. ;-;;,_
|,4- ) )-,_. ,\ ( `'-'
'---''(_/--' `-'\_) πr
perl -e '$_=q#: 3|\ 5_,3-3,2_: 3/,`.'"'"'`'"'"' 5-. ;-;;,_: |,A- ) )-,_. ,\ (
`'"'"'-'"'"': '"'"'-3'"'"'2(_/--'"'"' `-'"'"'\_):
24πr::#;y#:#\n#;s#(\D)(\d+)#$1x$2#ge;print'
- --> Ce message n’engage que son auteur <--