Utiliser grep cmd pour filtrer

Utiliser grep ou egrep

Combien d’adresses électroniques sont au format de nom ‘first.last’ ET impliquent une personne dont le prénom commence par une lettre dans la première moitié de l’alphabet? (Je veux avoir le compte)

extrait de testingfile.txt

[email protected] hhhhhh ItzStatic jackass The_Epic_Turtle [email protected] overthemoon34 smiley362 emilio [email protected] ddc44ever [email protected] [email protected] middle614 IntegrityJeff 5432 [email protected] [email protected] 

Pour ce faire, je voulais filtrer chaque ligne pour vérifier si elle avait un “@” et vérifier la première lettre pour voir si c’était AM ou AM, et vérifier si elle avait un point.

grep -c "@" testingfile.txt

grep -c "\." testingfile.txt grep -c "\." testingfile.txt (bien que cela ne vérifie que s’il y a 1 occurrence dans la ligne)

grep -c "[a-mA-M]" testingfile.txt (cela n’a toujours pas fonctionné)

Comment pourrais-je combiner les 3 déclarations ensemble, et comment pourrais-je vérifier pour voir si le premier caractère de chaque ligne est une lettre entre am ou AM?

Recherche d’adresses e-mail commençant par [a-mA-Z]

Comme vous étiez intéressé par le problème de plusieurs messages sur une ligne, considérons ce fichier de test:

 $ cat testingfile.txt [email protected] hhhhhh [email protected] overthemoon34 [email protected] [email protected] [email protected] IntegrityJeff 5432 [email protected] [email protected] 

Cela montre les premières parties de toutes les adresses e-mail correspondantes dont les premières lettres sont dans la première moitié de l’alphabet:

 $ grep -o "\b[a-mA-M][^[:blank:]]*@" testingfile.txt glorious@ david.webb@ Check.it@ dickens@ jdm-mojo@ gertrude@ 

Cela les compte:

 $ grep -o "\b[a-mA-M][^[:blank:]]*@" testingfile.txt | wc -l 6 

Être plus ssortingct sur le “premier” nom

Si nous voulons restreindre la correspondance aux adresses de messagerie dont le nom contient une période:

 $ grep -o "\b[a-mA-M][^[:blank:]]*\.[^[:blank:]]*@" testingfile.txt david.webb@ Check.it@ 

Et les compter:

 $ grep -o "\b[a-mA-M][^[:blank:]]*\.[^[:blank:]]*@" testingfile.txt | wc -l 2 

Remarques

  1. Le regex utilisé ici, \b[a-mA-M][^[:blank:]]*@ est assez simple. Il existe des expressions rationnelles qui sélectionnent avec précision les vraies adresses électroniques, mais elles sont assez complexes.

  2. grep -c compte les lignes. Nous devons d’abord utiliser grep -o pour mettre chaque match sur une ligne distincte, puis utiliser wc -l pour compter les lignes.

  3. Le regex [a-mA-M] n’est pas unicode-safe.

Vous pouvez utiliser:

  grep "^[a-mA-M].*\..*@" testingfile.txt 

Cela recherchera une chaîne où elle commence par la première moitié de l’alphabet ( ^[a-mA-M].* ) Puis, à un moment donné, contient un point ( .*\. ), Puis à un moment donné @ : ( .*@ ).