SED et le expressions régulières
Résolu
tht123
Messages postés
72
Date d'inscription
Statut
Membre
Dernière intervention
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
Rebonjour,
Je me suis mis au REGEX ===>aille...
Je souhaite en fait en fait effacer toute les lignes ou j'ai l'occurence FR en 18ème et 19ème caractères et pas les autres dans un fichier qui contient quelque chose du genre:
0123456789 58FR fkdlshjjkdfhuidghku
0123456789 58LA fkdlshjjkdfhuidghku
0123456789 58FR fkdlshjjkdfhuidghku
0123456789 58IT fkdlshjjkdfhuidghku
012FR56789 58UK fkdlshjjkdfhuidghku
0123456789 58FR fkdlshjjkdfhuidghku
J'ai trouvé la REGEX: \w qui signifie :
Matches any alphanumeric character; this is equivalent to the class [a-zA-Z0-9_]
et je dois donc l'utiliser avec la commande delete de sed mais comment??
D'avance merci BAV
Je me suis mis au REGEX ===>aille...
Je souhaite en fait en fait effacer toute les lignes ou j'ai l'occurence FR en 18ème et 19ème caractères et pas les autres dans un fichier qui contient quelque chose du genre:
0123456789 58FR fkdlshjjkdfhuidghku
0123456789 58LA fkdlshjjkdfhuidghku
0123456789 58FR fkdlshjjkdfhuidghku
0123456789 58IT fkdlshjjkdfhuidghku
012FR56789 58UK fkdlshjjkdfhuidghku
0123456789 58FR fkdlshjjkdfhuidghku
J'ai trouvé la REGEX: \w qui signifie :
Matches any alphanumeric character; this is equivalent to the class [a-zA-Z0-9_]
et je dois donc l'utiliser avec la commande delete de sed mais comment??
D'avance merci BAV
A voir également:
- Sed expression régulière
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Avoir du ping expression ✓ - Forum jeux en ligne
- C quoi un ping? ✓ - Forum Réseau
- Expression de recherche - Guide
7 réponses
(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
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
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)
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
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 @+