Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/10/2011, 17h18   #1
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 451
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 451
Points : 2 151
Points : 2 151
Par défaut Aide pour une expression régulière avec sed

Bonjour,

Je voudrais trouver l'équivalent sous sed de l'expression régulière suivante :
Code :
s/prefix_(?!(motif1|motif2))[^"]+/prefix_motif1/g
Elle a pour but de rechercher tous les éléments matchant prefix_motifN, avec motifN différent de motif1 et de motif2 et de les remplacer par prefix_motif1.

Apparement le "negative lookahead" (?!...) n'est pas connu de sed.

Pourtant j'utilise bien les modificateurs -r et -e, donc ça devrait reprendre les regex de Perl mais non.

Donc si vous avez des idées, je suis preneur.

Merci d'avance,
Loceka.
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h00   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
[fpu@lne ~/tmp] cat > d 
 
motif1
motif2
motif3
motif4
[fpu@lne ~/tmp] sed "s/motif[^12]/motifprefix1/" d
 
motif1
motif2
motifprefix1
motifprefix1
[fpu@lne ~/tmp]
subtitue motif suivi de [ni 1 ni 2] par motifprefix1
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h10   #3
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 451
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 451
Points : 2 151
Points : 2 151
D'accord, je me suis mal expliqué mais si c'était aussi simple je n'aurais pas utilisé le negative lookahead :

Je veux exécuter la regex suivante s/prefix_(?!(toto|tata))[^"]+/prefix_toto/g avec sed.

Appliquée à la chaîne '"prefix_toto"', elle ne fait rien.
Appliquée à la chaîne '"prefix_tata"', elle ne fait rien.
Appliquée à la chaîne '"prefix_titi"', elle la remplace par '"prefix_toto"'.

Pour information, je ne compte pas l'utiliser sur "prefix_titi", ni sur "prefix_motif3", ce sont juste des noms abstraits pour exposer le problème.
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h16   #4
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
Citation:
Envoyé par Loceka Voir le message
D'accord, je me suis mal expliqué mais si c'était aussi simple je n'aurais pas utilisé le negative lookahead :

Je veux exécuter la regex suivante s/prefix_(?!(toto|tata))[^"]+/prefix_toto/g avec sed.

Appliquée à la chaîne '"prefix_toto"', elle ne fait rien.
Appliquée à la chaîne '"prefix_tata"', elle ne fait rien.
Appliquée à la chaîne '"prefix_titi"', elle la remplace par '"prefix_toto"'.

Pour information, je ne compte pas l'utiliser sur "prefix_titi", ni sur "prefix_motif3", ce sont juste des noms abstraits pour exposer le problème.
même principe le sauf tu mets "titi"
et le patern de remplacement après
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h48   #5
Membre Expert
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 451
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 451
Points : 2 151
Points : 2 151
gné ?

Tu veux dire écrire ça ?
Code :
sed "s/prefix_[^tototata]/prefix_toto/" my_file
EDIT :
Pour info c'est faisable avec Perl en ligne de commande :
Code :
perl -pe 's/prefix_(?!(motif1|motif2))[^"]+/prefix_motif1/g' fichier
Ca a le même comportement que "sed -re 's/.../.../g' fichier" mais avec la vraie puissance de Perl.
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h14.


 
 
 
 
Partenaires

Hébergement Web