Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 17-03-2014 17:42:37

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Sed et Substitution entre deux motifs

Salut,
Je veux faire une substitution seulement entre deux motifs sur toutes les occurrences:
comme indiqué ici par exemple http://www.commentcamarche.net/faq/5588 … ution#bloc

echo debut de la fin et apres | sed '/debut/,/fin/ s/e/@/g'


Normalement, la commande ne devrait me changer les e en @ seulement entre le motif début et fin mais ça ne fonctionne pas.
J'obtiens ça:

d@but d@ la fin @t apr@s


Une idée?
Kao

Hors ligne

#2 17-03-2014 18:23:15

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : Sed et Substitution entre deux motifs

Je pense que tes patterns sont orientés "ligne" : http://www.grymoire.com/Unix/Sed.html#uh-29
Dès lors qu'il a trouvé "debut", toute la ligne est traitée à cause du 'global'.

Menfin, c'est ce que je crois comprendre. smile

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#3 17-03-2014 18:29:00

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : Sed et Substitution entre deux motifs

Je confirme, cette syntaxe indique les lignes de début et de fin.

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#4 17-03-2014 19:10:11

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : Sed et Substitution entre deux motifs

Bonjour

ça ne serait pas ça ???

echo "debut de la fin et apres" | sed '/debut/,/fin/ s/e/@/'



Edit : autant pour moi j'ai mal lu l’énoncé...

smile Slyfox

Dernière modification par Slyfox (17-03-2014 19:15:05)

Hors ligne

#5 17-03-2014 19:13:06

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : Sed et Substitution entre deux motifs

Ben là, tu t'arrêtes à la première occurrence.

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#6 17-03-2014 19:46:22

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : Sed et Substitution entre deux motifs

Pour traiter ligne une substitution ligne par ligne, je vais pouvoir m'arranger avec awk je pense.

Comme c'est pour un fichier csv, je vais pouvoir choisir le champ sur lequel faire la substitution

echo test1 test2 test3 | awk '{ gsub("e","@",$3);  print $N}'


test1 test2 t@st3



Avec  comme séparateurs un ";"

echo test1\;test2\;test3 | awk -F\; 'BEGIN {OFS=";"} {  gsub("e","R",$2); print $N}'


test1;tRst2;test3


Et je peux cumuler facilement:

echo test1\;test2\;test3 | awk -F\; 'BEGIN {OFS=";"} { gsub("e","@",$2); gsub("e","R",$3); print $N}'


test1;t@st2;tRst3



Pour mon script, c'est plus précis, par contre il va falloir que je reprenne pas mal de code bash.
Dommage que ce soit pas possible avec SED....

Hors ligne

#7 17-03-2014 19:50:39

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : Sed et Substitution entre deux motifs

J'avais pensé à te proposer avec AWK (que j'utilise beaucoup) mais la question était avec SED.
L’essentiel c'est que tu trouves ton compte. smile

Pour info :http://www.corporesano.org/doc-site/grepawksed.htm

smile Slyfox

Dernière modification par Slyfox (17-03-2014 19:51:31)

Hors ligne

#8 17-03-2014 20:00:12

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : Sed et Substitution entre deux motifs

Tiens je poste au cas ou... ??? hmm

echo "debut de la fin et apres" | sed 's/e/@/; s/e/@/'



smile Slyfox

Dernière modification par Slyfox (17-03-2014 20:02:42)

Hors ligne

#9 17-03-2014 20:34:09

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : Sed et Substitution entre deux motifs

Oui mais, mais je ne peux pas être sur de taper sur le bon, admettons que j'ai deux lignes

debut de la fin et apres
prefixe du debut de la fin et apres


echo -e "debut de la fin et apres\nprefixe du debut de la fin et apres" | sed 's/e/@/; s/e/@/'


d@but d@ la fin et apres
pr@fix@ du debut de la fin et apres


Du coup, je ne tape pas entre debut et fin hmm

Dans le csv, j'ai des commentaires plus ou moins long avec plus ou moins de blabla, je veux être sur de taper dans le bon.
Avec awk est les séparateurs je suis tranquille.

Hors ligne

#10 17-03-2014 20:37:17

Slyfox
Membre
Lieu : Pays du chocolat
Distrib. : GNU/Linux Debian Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : MATE
Inscription : 15-12-2013

Re : Sed et Substitution entre deux motifs

Tu parles à un convaincu... Alors fais le avec AWK ! cool

smile Slyfox

Hors ligne

Pied de page des forums