bonjour
j' était entrain de faire un exercice et j'ai pas bien compris la solution d'une commande :
Pièce jointe 263574
merci d'avance :)
Version imprimable
bonjour
j' était entrain de faire un exercice et j'ai pas bien compris la solution d'une commande :
Pièce jointe 263574
merci d'avance :)
C'est pour rejeter les lignes qui commenceraient par le séparateur :.
[^0-9]* signifie : un nombre indéfini de caractères non numériques, y compris aucun.
En ajoutant [^0-9] devant, l'expression devient : au moins un caractère non numérique.
Je suppose que tu apprendras le quantificateur + dans un exercice suivant ;)
merci bien !
des sources français (gratuit :) ) pour bien maîtriser ces commandes de base ?
une dernière petite questionne :
quelle est la différence entre "*[^0-9]" et "[^0-9]*" ?
salut,
la première correspond plutôt à du globbing à mon avis, elle signifie "zéro ou plusieurs caractère(s) suivi(s) (le dernier caractère donc) d'un caractère qui n'est pas un chiffre"
la deuxième pourrait passer pour une expression rationnelle mais dans le contexte du globbing elle signifie "le premier caractère n'est pas un chiffre, suivi de zéro ou plus autres caractères quelconques"
note que ça n'a rien à voir avec les expressions qu'utilise grep, ici il s'agit de globbing effectué par le shell directement, la syntaxe *[^0-9] ne fonctionne pas avec grep qui utilise des expressions rationnelles (regular expressions, regexp) et même de plusieurs sortes (basiques, étendues et compatibles Perl, donc oui je te confirme : c'est un peu le bordel :aie:)Code:
1
2
3
4
5
6 # ls * _123_ 1234a 123abc 1abcde a1234 a1b2c3 ~abc~ abc123 abcde1 # ls *[^0-9] _123_ 1234a 123abc 1abcde ~abc~ # ls [^0-9]* _123_ a1234 a1b2c3 ~abc~ abc123 abcde1
(les switches -G, -E, -P permettent d'utiliser les regex basiques, étendues et PCRE, l'option --color=always met de la couleur sur ce qui matche réellement (perdue avec le copier/coller), xargs permet d'afficher tout sur une seule ligne)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 # ls | grep -G "*[^0-9]" --color=always | xargs # ls | grep -E "*[^0-9]" --color=always | xargs _123_ 1234a 123abc 1abcde a1234 a1b2c3 ~abc~ abc123 abcde1 # ls | grep -P "*[^0-9]" --color=always | xargs /bin/grep: nothing to repeat # ls | grep -G "[^0-9]*" --color=always | xargs _123_ 1234a 123abc 1abcde a1234 a1b2c3 ~abc~ abc123 abcde1 # ls | grep -E "[^0-9]*" --color=always | xargs _123_ 1234a 123abc 1abcde a1234 a1b2c3 ~abc~ abc123 abcde1 # ls | grep -P "[^0-9]*" --color=always | xargs _123_ 1234a 123abc 1abcde a1234 a1b2c3 ~abc~ abc123 abcde1