Utilisation de regex sous Mac OS X: pourquoi dois-je ajouter \ in {3, 5} ==> \ {3, 5 \}…?

4

J'essaie de trouver tous les fichiers sans extension dans un dossier particulier, et après plusieurs tentatives, j'ai finalement trouvé cette déclaration regex:

ls | grep "\.[A-Za-z]\{3,5\}$"

Pourquoi dois-je commencer les occurrences autour du {} avec \, comme pour échapper à la séquence? Est-il possible d'utiliser un regex standard comme celui-ci?

ls | grep "\.[A-Za-z]{3,5}$"

Je veux, en fin de compte, obtenir la liste opposée des fichiers sans extension, mais cette expression rationnelle non standard me rend difficile l’annulation du résultat du grep.

user_dhrn
la source

Réponses:

1

Si votre shell est ksh, vous pouvez lister les fichiers du répertoire en cours sans l’extension suivante:

printf '%s\n' !(*.*)

Bash prend en charge les globs étendus ksh lorsque vous les activez:

shopt -s extglob
printf '%s\n' !(*.*)
fd0
la source
3

Si je comprends bien votre question, vous n'avez pas besoin d' échapper aux accolades avec une barre oblique inverse si vous formez la commande correctement.

En d'autres termes, lorsque vous utilisez un RegRx avec grep, indiquez-lui que le modèle de recherche est un RegEx à l'aide de l' -E option .

Si vous souhaitez une correspondance inverse, utilisez également l' -v option .

Exemple:

ls | grep -E -v '\.[A-Za-z]{0,5}$'
  • Notez que j'ai utilisé {0,5}$au lieu de {3,5}$tenir compte de n'importe quelle extension jusqu'à 5 caractères. Si vous souhaitez inclure des fichiers pouvant comporter une extension de 1 ou 2 caractères, utilisez {3,5}$plutôt.

Vous pouvez également utiliser l'exemple suivant:

ls | grep -E -v '\.[[:alpha:]]{0,5}$'

Parfois, une extension de fichier peut contenir des numéros. Pour en tenir compte, utilisez comme exemple:

ls | grep -E -v '\.[A-Za-z0-9]{0,5}$'

Ou:

ls | grep -E -v '\.[[:alnum:]]{0,5}$'

Remarque: Certaines commandes nécessitent que les options soient passées individuellement, alors que d'autres peuvent être combinées. Dans ce cas, grepautorise les options à être concaténées. Ainsi, dans les exemples de commandes , -E -vpeut être exprimé par -Evou -vE, si vous le souhaitez.

utilisateur3439894
la source