|
|
|
|
||||||
| fr.comp.os.unix Système UNIX. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 (permalink) |
|
Messages: n/a
Hébergeur: |
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. Je n'arrive pas à pavenir à ce résultat de manière 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ée. Les outils comme sed permettent de faire des rechercher/remplacer, mais conservent tout ce qui ne correspond pas au motif. Merci -- Yves Kuhry |
|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
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])/\n\1/g # préfixe les motifs avec un caractère impossible s,^[^\n]*,, # supprime le début de ligne s,(T[aeiou])[^\n]*,[\1\1],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 |
|
![]() |
| Outils de la discussion | |
|
|