Rechercher : dans
Par :

SED et le expressions régulières

Dernière réponse le 18 mai 2007 à 14:05:16 tht123, le 11 mai 2007 à 15:15:39 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « SED et le expressions régulières » dans :
PHP - Expressions régulières Voir Qu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
Sed - Supprimer une ou plusieurs lignes d'un fichier VoirSupprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Sed - Introduction à SED - Part III VoirSED - The Stream EDitor - Part III Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...
Sed - Trucs et astuces VoirSubstitution Affichage Suppression Espace et tabulation Ligne vide Intervalle régulier Divers Joindre des lignes Affichage insensible à la casse Substitution Substituer "foo" par "bar" à chaque ligne Seulement la 1ère...
Javascript - L'objet RegExp VoirLes particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...

1

mamiemando, le 11 mai 2007 à 16:11:47

(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

Répondre à mamiemando

2

tht123, le 11 mai 2007 à 16:50:57

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

Répondre à tht123

3

lami20j, le 11 mai 2007 à 17:14:06

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)

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:01234567890123467FRfkdlshjjkdfhuidghku
donc 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

Répondre à lami20j

4

lami20j, le 11 mai 2007 à 19:26:00

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 lami20j

Répondre à lami20j

5

tht123, le 18 mai 2007 à 12:43:37

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 @+

Répondre à tht123

6

lami20j, le 18 mai 2007 à 13:48:02

sed 's/^.*\(FR\|TR\|XY\)/Ligne \1 EFFACEE/' fichier.txt
--
lami20j

Répondre à lami20j

7

 jipicy, le 18 mai 2007 à 14:05:16

Salut,

 sed '/FR\|TR\|XY/c"Ligne EFFACEE"' fichier
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy
Collection CommentÇaMarche.net