Commande GREP (filtre)
Résolu
dkpiit
-
Dkpiit -
Dkpiit -
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
é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
1 réponse
-
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èrea
.
En fait[^a]
remplace le.
.
Doncgrep 'a[^a]*a'
se lira de cette façon :
Un caractèrea
suivi de n'importe quel caractère à l'exception du caractèrea
jusqu'à ce qu'on rencontre un caractèrea
.
-
Pour ta seconde comande, il y a une faute déjà, ce n'est pas :
grep '^[^a]*a[^a]*[^a]*$'
maisgrep '^[^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'una
jusqu'à ce qu'on rencontre una
.[^a]*a
puis, n'importe quel caractère à l'exception du caractèrea
jusqu'à ce qu'on rencontre un caractèrea
.[^a]*$
n'importe quel caractère à l'exception du caractèrea
jusqu'à ce qu'on atteigne la fin de la ligne$
. -
-