En ce qui concerne la validité, deux choses:
[:blank:]
est une classe de caractères. Pour l'utiliser dans une plage que vous devez l'envelopper avec [ ]
, comme ceci: [[:blank:]]
votre dernière expression de gamme ne comprend pas d'espaces, de sorte que vous correspondez seul le premier mot
fixe, ressemble :
$ grep -E '^([0-9]+[0-9]*[.]+[[:blank:]]+[a-zA-Z0-9 ]+)' text.txt
1. hello
2. this works too
5. Fantastic show
12. Target
Sinon, comme d'autres l'ont laissé entendre, votre expression peut être simplifiée. Si vous devez coller aux expressions régulières étendues POSIX (ERE), notez que [0-9]+[0-9]*
est équivalent à [0-9]+
.
Si vous pouvez activer le support PCRE (avec -P
, disponible uniquement dans GNU grep
, considéré comme fonctionnalité expérimentale), vous pouvez simplifier les gammes de caractères utilisés. Par exemple, vous pouvez utiliser \d
au lieu de POSIX [[:digit:]]
(ou [0-9]
), et \w
au lieu de [[:alnum:]]
(ou [a-zA-Z0-9]
):
$ grep -P '^\d+\.+\s+[\w ]+' text.txt
Ce site pourrait vous aider avec votre regex https://regexr.com/ – Kixoka
@ctwheels, pas (portably) avec 'grep' vous ne pouvez pas.Ce que vous fournissez ci-dessus a la syntaxe PCRE pas garanti d'être présent dans ERE sans extensions spécifiques à la plate-forme. La spécification ERE n'inclut pas '\ d', * ou *' \ s', * ou * '\ w'. –
@CharlesDuffy merci de le signaler. Je vais supprimer mon commentaire précédent afin de ne pas créer de confusion supplémentaire pour les utilisateurs de syntaxe non-PCRE. La regex peut encore être simplifiée, puisque le premier jeton est gourmand, donc le second jeton est vraiment redondant. – ctwheels