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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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...
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
gamotte
Merci beaucoup pour la réponse et les explications détaillées.
-- Yves kuhry
Merci beaucoup pour la réponse et les explications détaillées.