Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 18/01/2012, 16h36   #1
Membre régulier
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 88
Points : 83
Points : 83
Par défaut [HP-UX 11i] grep avec regexp

Ola,

Je suis à la recherche d'un grep qui me permettra de me donner toutes les lignes qui contiennent un nombre de 3 chiffres commençant par 5 (bref tout de 500 à 599).

A titre d'exemple le fichier :
Code :
1
2
3
4
5
6
7
8
>cat grep_test.txt
osef
pas 45189
bien 524 et
512 mais pas
54268 en revanche
il faut prendre 550
et pas le reste
Il faudrait donc que ma commande me retourne les lignes :
Code :
1
2
3
bien 524 et
512 mais pas
il faut prendre 550
Si je fais simplement ceci :
Code :
1
2
3
4
5
6
>grep '5[0-9][0-9]' grep_test.txt
pas 45189
bien 524 et
512 mais pas
54268 en revanche
il faut prendre 550
Ce n'est pas bon

Il ne faut évidemment éviter les nombres qui terminent, commencent ou contiennent 5XX.
Code :
1
2
>grep '[^0-9]5[0-9][0-9][^0-9]' grep_test.txt
bien 524 et
mais je perd les lignes qui commencent ou finissent avec un 5XX.

Donc je me suis dit qu'il fallait que mon 5XX soit le début d'une ligne ou précéder par un blanc, ou la fin d'une ligne ou suivi par un blanc :
Code :
1
2
 >grep '[ ^]5[0-9][0-9][ $]' grep_test.txt
bien 524 et
Toujours pas

Une idée ?
rafuoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 17h03   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Code :
 grep -E '\b5[0-9]{2}\b'
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 09h36   #3
Membre régulier
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 88
Points : 83
Points : 83
Par défaut a march' pô

hmm... cela ne renvoie rien du tout.
Code :
1
2
 > grep -E '\b5[0-9]{2}\b' grep_test.txt
 >
Pourtant quand je regarde la doc des regex via google, la réponse semble bonne vu que '\b' marque le début ou la fin d'un mot. Donc ton expression devrait donner n'importe quel mot commençant par 5, contenant 2 chiffres et qui se finit. Mais bon, cela ne fonctionne pas...

pour info je tourne sous en environement Unix HP-UX Release 11i
rafuoner est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2012, 10h25   #4
Membre régulier
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 88
Points : 83
Points : 83
Par défaut ceci à l'air de fonctionner

Au lieu d'essayer de trouver une seule regex qui me donne tout d'un coup, j'ai réussi avec 3 :
Code :
1
2
3
4
 >grep -e '^5[0-9][0-9][^0-9]' -e '[^0-9]5[0-9][0-9][^0-9]' -e '[^0-9]5[0-9][0-9]$' grep_test.txt
bien 524 et
512 mais pas
il faut prendre 550
cela fonctionne, mais je ne peux pas m’empêcher de me dire qu'il y a moyen de le faire en une seule regex... et pas via une combinaison de 3...
rafuoner est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/01/2012, 10h27   #5
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par rafuoner Voir le message
hmm... cela ne renvoie rien du tout.
pour info je tourne sous en environement Unix HP-UX Release 11i
Ben forcément, j'aurai dû me douter

Bon chez moi ça marche même avec "\<" et "\>" à la place de "\b" :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ cat plop 
osef
pas 45189
bien 524 et
512 mais pas
54268 en revanche
il faut prendre 550
et pas le reste
 
$  grep -E '\b5[0-9]{2}\b' plop 
bien 524 et
512 mais pas
il faut prendre 550
 
$  grep -E '\<5[0-9]{2}\>' plop 
bien 524 et
512 mais pas
il faut prendre 550
 
$
Sinon essaie de protéger les caractères spéciaux grep '\b5[0-9]\{2\}\b' en environnement de regex basiques...
Code :
1
2
3
4
5
6
$  grep  '\b5[0-9]\{2\}\b' plop 
bien 524 et
512 mais pas
il faut prendre 550
 
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/01/2012, 10h41   #6
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Code :
egrep "([^0-9]|^)5[0-9][0-9]([^0-9]|$)"
fonctionne chez moi ...
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 21
Vieux 19/01/2012, 11h46   #7
Membre régulier
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 88
Points : 83
Points : 83
Par défaut nickel

C'est pile-poil ce que je voulais.

J'ignorais que l'on pouvait mettre des "ou" avec des | dans une expression régulière

Super !
rafuoner est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h46.


 
 
 
 
Partenaires

Hébergement Web