grep pour une chaîne alphanumérique de n'importe quelle longueur avec deux points de chaque côté


14

Comment voulez-vous rechercher des chaînes alphanumériques de 1 à 50 caractères (idéalement, n'importe quelle longueur fonctionnerait aussi) avec deux points de chaque côté - un résultat typique serait toutes les lignes contenant la chaîne :shopping:. Jusqu'à présent, j'ai le code ci-dessous (j'ai essayé quelques variantes) qui ne fonctionne pas:

grep ':[[:alnum:]]{1,100}:' ~/x.txt

Il vous suffit d'activer les capacités de regex étendues grepen incluant le -Ecommutateur.
slm

Réponses:


13

Vous devez activer les expressions régulières étendues pour cela:

grep -E ':[[:alnum:]]+:' ~/x.txt

4

Avec les expressions régulières de base, vous pouvez l'écrire comme:

grep ':[[:alnum:]]\{1,100\}:' ~/x.txt

Notez que \{(par opposition à \+ou \?par exemple) est standard et portable, et en fait les équivalents BRE de +et ?sont généralement écrits avec \{: \{1,\}et \{0,1\}. grep -Eest également standard et portable, vous pouvez donc aussi bien l'utiliser car il rend les expressions rationnelles plus lisibles dans ces cas.


1

Vous utilisez une expression régulière étendue, vous devez donc utiliser l'option -E:

grep -E ':[[:alnum:]]{1,100}:' ~/x.txt

Merci! J'ai mis l'autre réponse comme correcte parce que je n'ai pas écrit mon script "idéal" dans le titre, et je ne veux pas que les gens qui recherchent une réponse sur Google copient-collent la mauvaise réponse, mais je vais utiliser la vôtre. :)

1
@TorThommesen - vous pouvez modifier le titre de votre Q s'il n'est pas correct.
slm

0

Puisque personne d'autre ne l'a mentionné, vous pouvez également utiliser egrepce qui, si je comprends bien, est équivalent à grep -E.

egrep ':[[:alnum:]]{1,100}:' ~/x.txt

1
egrepétait la commande historique de grep avec les ERE. Les fonctionnalités de grep et egrep ont depuis (depuis longtemps) été fusionnées dans grep avec l'option -E. egrepest désormais considéré comme obsolète / obsolète (mais il est peu probable qu'il y aille car certaines personnes y sont encore habituées).
Stéphane Chazelas
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.