44 votes

Comment rechercher des groupes de n chiffres, mais pas plus de n?

Je suis en train d'apprendre Linux, et j'ai un défi que je semble échouer à résoudre seul. Voici :

chercher une ligne dans un fichier qui contient 4 chiffres d'affilée mais pas plus de 4.

Je ne suis pas sûr de comment aborder cela. Je peux rechercher des nombres spécifiques mais pas leur quantité dans une chaîne.

10voto

Laserallan Points 5500

Cela vous montrera 4 numéros à la suite mais pas plus

grep '[0-9][0-9][0-9][0-9][^0-9]' file

Remarquez que le ^ signifie pas

Il y a cependant un problème avec cela, mais je ne suis pas sûr comment le corriger ... si le nombre est à la fin de la ligne, il ne s'affichera pas.

Cette version plus moche fonctionnerait cependant pour ce cas

grep '[0-9][0-9][0-9][0-9]' file | grep -v [0-9][0-9][0-9][0-9][0-9]

1voto

Mike Tyson Points 11

Vous pouvez essayer la commande ci-dessous en remplaçant file par le nom réel du fichier dans votre système :

grep -E '(^|[^0-9])[0-9]{4}($|[^0-9])' file

Vous pouvez également consulter ce tutoriel pour plus d'utilisations de la commande grep.

0voto

kenorb Points 8840

Si grep ne prend pas en charge les expressions régulières perl (-P), utilisez la commande shell suivante :

grep -w "$(printf '[0-9]%.0s' {1..4})" fichier

printf '[0-9]%.0s' {1..4} produira 4 fois [0-9]. Cette méthode est utile lorsque vous avez de longs chiffres et que vous ne voulez pas répéter le motif (remplacez simplement 4 par le nombre de vos chiffres à rechercher).

En utilisant -w, il recherchera les mots entiers. Cependant, si vous êtes intéressé par les chaînes alphanumériques, telles que 1234a, ajoutez [^0-9] à la fin du motif, par exemple

grep "$(printf '[0-9]%.0s' {1..4})[^0-9]" fichier

L'utilisation de $() est essentiellement une substitution de commande. Consultez ce post pour voir comment printf répète le motif.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X