Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

rechercher/remplacer

2 réponses
Avatar
gamotte
Bonjour,

Je cherche =E0 faire la chose suivante pour chaque ligne d'un fichier:
- chercher un motif donn=E9
- remplacer chaque occurrence de ce motif par autre chose, le reste de
la ligne =E9tant =E9limin=E9
- si le motif n'est pas trouv=E9, la chaine en sortie est vide

Par exemple, si on a la chaine

blablablaToblablaTiblablaTubla

et le motif "T[aeiou]" qui doit =EAtre remplac=E9 par lui-m=EAme deux
fois, la
sortie devrait =EAtre

ToToTiTiTuTu

appliqu=E9 =E0 la cha=EEne "blablablabla", on devrait avoir en sortie une
cha=EEne vide.

Je n'arrive pas =E0 pavenir =E0 ce r=E9sultat de mani=E8re simple. L'option
-o
de grep permet d'isoler le motif trouver mais pas de faire des
remplacements et passe a la ligne apres chaque occurrence trouv=E9e. Les
outils comme sed permettent de faire des
rechercher/remplacer, mais conservent tout ce qui ne correspond pas au
motif.


Merci

--=20
Yves Kuhry

2 réponses

Avatar
Jacques L'helgoualc'h
Le 07-04-2006, gamotte chez hotmail.com a écrit :
Bonjour,


bonjour,

Je cherche à faire la chose suivante pour chaque ligne d'un fichier:
- chercher un motif donné
- remplacer chaque occurrence de ce motif par autre chose, le reste de
la ligne étant éliminé
- si le motif n'est pas trouvé, la chaine en sortie est vide

Par exemple, si on a la chaine

blablablaToblablaTiblablaTubla

et le motif "T[aeiou]" qui doit être remplacé par lui-même deux
fois, la
sortie devrait être

ToToTiTiTuTu

appliqué à la chaîne "blablablabla", on devrait avoir en sortie une
chaîne vide.


Avec GNU Sed (v.4),

echo 'blablaToblablaTiblaTubla
TablaTiblabla
BloBloBlo' | sed -re '
/T[aeiou]/!d # supprime une ligne sans motif
s/(T[aeiou])/n1/g # préfixe les motifs avec un caractère impossible
s,^[^n]*,, # supprime le début de ligne
s,(T[aeiou])[^n]*,[11],g # duplique et encadre les motifs, nettoie derrière
s,n,,g' # supprime les marquages
[ToTo][TiTi][TuTu]
[TaTa][TiTi]

Sans l'option -r, il faut préfixer les parenthèses par «  » (ainsi que
+, |, ?, ...). Certaines versions de Sed peuvent refuser le n...

Merci


de rien,
--
Jacques L'helgoualc'h

Avatar
gamotte
Merci beaucoup pour la réponse et les explications détaillées.


--
Yves kuhry