Commande GREP (filtre)

Résolu/Fermé
dkpiit - 12 janv. 2014 à 15:45
 Dkpiit - 12 janv. 2014 à 18:26
Bonjour,
étant étudiant et révisant pour les partiels , j'ai relu la correction d'un de mes DS de système quand je suis tombé sur une commande que je ne comprends pas

il s'agit de n'afficher que les lignes qui contiennent au moins 2 fois la lettre "a"
la correction dit : grep 'a[^a]*a' FICHIER
je n'arrive pas à trouver comment lire cette commande, car pour moi 'a[^a] signifie "a" non suivi de "a" et *a signifie un caractère suivit de "a"
pourquoi cela donnerait "au moins 2 fois la lettre "a" "
et les lettres "a" ne pourraient pas être collées ?

de plus la commande suivante dit "exactement 2 fois la lettre "a"

grep '^[^a]*a[^a]*[^a]*$' FICHIER

je ne comprends absolument pas celle-ci

Merci d'avance pour votre aide


A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
12 janv. 2014 à 17:54
Salut,

car pour moi 'a[^a] signifie "a" non suivi de "a" et *a signifie un caractère suivit de "a"

En fait tu interprètes mal le
[^a]*
.

Il faut le voir plutôt dans le sens de
.*
, ce qui signifie, un caractère ou plusieurs, voire aucun, mais comme il y a
[^a]*
, il faut l'interpréter comme n'importe quel caractère à l'exception du caractère
a
.

En fait
[^a]
remplace le
.
.

Donc
grep 'a[^a]*a'
se lira de cette façon :
Un caractère
a
suivi de n'importe quel caractère à l'exception du caractère
a
jusqu'à ce qu'on rencontre un caractère
a
.

1
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
12 janv. 2014 à 18:13
Pour ta seconde comande, il y a une faute déjà, ce n'est pas :
grep '^[^a]*a[^a]*[^a]*$'
mais
grep '^[^a]*a[^a]*a[^a]*$'


Le principe est le même.

^[^a]*a
on part d'un début de ligne
^
suivit de n'importe quel caractère à l'exception d'un
a
jusqu'à ce qu'on rencontre un
a
.
[^a]*a
puis, n'importe quel caractère à l'exception du caractère
a
jusqu'à ce qu'on rencontre un caractère
a
.
[^a]*$
n'importe quel caractère à l'exception du caractère
a
jusqu'à ce qu'on atteigne la fin de la ligne
$
.
0
D'accord, je comprends mieux, je vais faire d'autres essait pour vérifier si j'ai bien compris, encore merci !
:-)
0