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" <mc@unistra.fr>
À: "roger tarani" <roger.tarani@free.fr>
Cc: "Liste Debian" <debian-user-french@lists.debian.org>
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