http://toto.com/foobar
http://toto.com/ barbaz
http://toto.com/ baztruc
http://toto.com/ trucmachin
h ttp://toto.com/ machin
De: "roger tarani" <roger.tarani@free.fr>
À: "Liste Debian" <debian-user-french@lists.debian.org>
Envoyé: Jeudi 4 Novembre 2021 14:43:01
Objet: 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/ baztruc
http://toto.com/ trucmachin
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
J'ai tenté diverses expressions, comme par exemple dans une variable : RES=$( sed '/^abc\|^$/! { p; s|^| -> '$DOMAIN'|g }')
$(sed '/^abc\|^$/! { p; s|^| -> '"$DOMAIN"'|g }' "$RES" > mon_fichier)
En ligne de commande, j'obtiens exactement le résultat escompté sur stdout ou dans le fichier.
J'obtiens le résultat aplati, sans séparateur :
foo bar baz truc machin
Quel mystère y a-t-il qui m'échapperait donc ?
perdu.comok 1.
perdu.comok 2
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
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 300 |
Nodes: | 16 (2 / 14) |
Uptime: | 74:52:23 |
Calls: | 6,715 |
Calls today: | 3 |
Files: | 12,246 |
Messages: | 5,357,385 |