SED et le expressions régulières
Résolu/Fermé
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
-
11 mai 2007 à 15:15
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 18 mai 2007 à 14:05
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 18 mai 2007 à 14:05
A voir également:
- Sed expression régulière
- Expression de recherche - Guide
- Expression encoder - Télécharger - Divers Utilitaires
- Tu es un amour expression ✓ - Forum Loisirs / Divertissements
- T'as du ping expression ✓ - Forum Réseau
- Modèle fiche expression de besoin excel - Forum Word
7 réponses
mamiemando
Messages postés
33078
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 avril 2024
7 749
11 mai 2007 à 16:11
11 mai 2007 à 16:11
(mando@cenedra) (~) $ cat plop.txt 01234567890123467FRfkdlshjjkdfhuidghku 0123456789 58LA fkdlshjjkdfhuidghku 0123456789aaaa 57FR fkdlshjjkdfhuidghku 012345678958IT fkdlshjjkdfhuidghku 012FR56789 58UK fkdlshjjkdfhuidghku 0123456789 58FR fkdlshjjkdfhuidghku (mando@cenedra) (~) $ grep ".\{17\}FR" plop.txt 01234567890123467FRfkdlshjjkdfhuidghku 0123456789aaaa 57FR fkdlshjjkdfhuidghku
Bonne chance
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
11 mai 2007 à 16:50
11 mai 2007 à 16:50
Merci beaucoup, j'ai juste modifié la regex comme suit:
sed "s/^.\{13\}FR/ligne FR effacee/" tstdel.txt
Bonne journée.
BAT et merci
sed "s/^.\{13\}FR/ligne FR effacee/" tstdel.txt
Bonne journée.
BAT et merci
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
11 mai 2007 à 17:14
11 mai 2007 à 17:14
Salut,
attention avec l'ancrage
au début tu demandes les positions 18 et 19
avec ancrage ça ne marche pas
Pourquoi?
Discutons ta regex /^.\{13\}FR/
En ce cas l'ancrage oblige le départ au début de chaîne, donc seulement FR après les premières caractères sera reconnu et pas le 14 ème (en supposant que tu voulais les 2 - vu ta question)
En revanche ce que Miss t'a donné est très correct.
Pourquoi?
Si nous n'utilisons pas l'ancrage alors . peux reconnaître le 1er caractère de la chaîne 13 fois et ensuite trouver le 14ème et le 15ème F et R
Si F se trouve dans la position 15 et 16 (ce que veut dire après 14 caractères) la regex de Miss fonctionne mais pas la tienne.
Rappelle toi que je t'ai dit que le moteur n'est pas intelligent mais persévèrent et exhaustif. Donc le moteur va chercher d'abord en commencent avec le 1er caractère (et il va trouver F en postion 14 et R en position 15) ensuite comme il est persévèrent il va recommencer la recherche à partir de la position 2 donc il va trouver d'abord 13 caractères et ensuite un F (qui en réalité dans la chaîne est à la position 15) et puis un R (qui est en réalité dans la position 16)
Voilà pour exemple (la reconnaissance était dans les lignes 1 et 3, j'ai rajouté un caractères pour avoir F dans les 2 position 17 et 18 - voir en gras)
1. la solution de Miss (pas d'ancrage)
2. ta solution (avec ancrage)
attention avec l'ancrage
au début tu demandes les positions 18 et 19
avec ancrage ça ne marche pas
Pourquoi?
Discutons ta regex /^.\{13\}FR/
En ce cas l'ancrage oblige le départ au début de chaîne, donc seulement FR après les premières caractères sera reconnu et pas le 14 ème (en supposant que tu voulais les 2 - vu ta question)
En revanche ce que Miss t'a donné est très correct.
Pourquoi?
Si nous n'utilisons pas l'ancrage alors . peux reconnaître le 1er caractère de la chaîne 13 fois et ensuite trouver le 14ème et le 15ème F et R
Si F se trouve dans la position 15 et 16 (ce que veut dire après 14 caractères) la regex de Miss fonctionne mais pas la tienne.
Rappelle toi que je t'ai dit que le moteur n'est pas intelligent mais persévèrent et exhaustif. Donc le moteur va chercher d'abord en commencent avec le 1er caractère (et il va trouver F en postion 14 et R en position 15) ensuite comme il est persévèrent il va recommencer la recherche à partir de la position 2 donc il va trouver d'abord 13 caractères et ensuite un F (qui en réalité dans la chaîne est à la position 15) et puis un R (qui est en réalité dans la position 16)
Voilà pour exemple (la reconnaissance était dans les lignes 1 et 3, j'ai rajouté un caractères pour avoir F dans les 2 position 17 et 18 - voir en gras)
lami20j@debian:~/trash$ cat plop.txt 01234567890123467FRfkdlshjjkdfhuidghku 0123456789 58LA fkdlshjjkdfhuidghku 0123456789aaaa 57ZFR fkdlshjjkdfhuidghku 012345678958IT fkdlshjjkdfhuidghku 012FR56789 58UK fkdlshjjkdfhuidghku 0123456789 58FR fkdlshjjkdfhuidghku
1. la solution de Miss (pas d'ancrage)
lami20j@debian:~/trash$ grep -nE '.{17}FR' plop.txt 1:01234567890123467FRfkdlshjjkdfhuidghku 3:0123456789aaaa 57ZFR fkdlshjjkdfhuidghku
2. ta solution (avec ancrage)
lami20j@debian:~/trash$ grep -nE '^.{17}FR' plop.txt 1:01234567890123467FRfkdlshjjkdfhuidghkudonc cette fois le moteur se contente de chercher seulement en commençant avec le début de la chaîne puisque tu l'obliges en utilisant ^ ( début de chaîne)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
11 mai 2007 à 19:26
11 mai 2007 à 19:26
Je crois que j'ai mal compris.
En fait quand on parle des regex on parle caractères par caractères
on dit F en position 18 suit d'un R en position 19 et pas FR en postion 18 et 19 (d'où le fait que j'ai mal compris) - mea culpa :-)
en ce cas tu as bien ancrer ta regex
et la solution de Miss n'est pas très performante si on a un couple F dans la position 19 suit de R dans la position 20
En fait quand on parle des regex on parle caractères par caractères
on dit F en position 18 suit d'un R en position 19 et pas FR en postion 18 et 19 (d'où le fait que j'ai mal compris) - mea culpa :-)
en ce cas tu as bien ancrer ta regex
et la solution de Miss n'est pas très performante si on a un couple F dans la position 19 suit de R dans la position 20
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tht123
Messages postés
72
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
10 janvier 2009
18 mai 2007 à 12:43
18 mai 2007 à 12:43
Hello L'ami20j!
Ok et merci pour tes explications cela se désembrume peu à peu!
tiens SED n'est pas intelligent, mais pourrais-je envisager des combinaisons logiques??
Ex aulieu de chercher seulement FR je voudrais par exemple
FR OU TR OU...OU XY???
J'ai essayé en remplacant FR dans la regex d'avant par :
1) FR\|TR\|XY
2) (FR\|TR\|XY)
3) [FR\|TR\|XY]
Mais cela n'a rien donné??
BAT @+
Ok et merci pour tes explications cela se désembrume peu à peu!
tiens SED n'est pas intelligent, mais pourrais-je envisager des combinaisons logiques??
Ex aulieu de chercher seulement FR je voudrais par exemple
FR OU TR OU...OU XY???
J'ai essayé en remplacant FR dans la regex d'avant par :
1) FR\|TR\|XY
2) (FR\|TR\|XY)
3) [FR\|TR\|XY]
Mais cela n'a rien donné??
BAT @+
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
18 mai 2007 à 13:48
18 mai 2007 à 13:48
sed 's/^.*\(FR\|TR\|XY\)/Ligne \1 EFFACEE/' fichier.txt--
lami20j
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
18 mai 2007 à 14:05
18 mai 2007 à 14:05
Salut,
sed '/FR\|TR\|XY/c"Ligne EFFACEE"' fichier;-))