1 votes

J'ai des difficultés à utiliser une expression rationnelle pour extraire certaines informations d'un fichier de données.

Les données avec lesquelles je travaille ont ce format :

1880    20  David   7570    Mabel   13096

J'ai besoin d'extraire l'année (1880), le rang (20), et le nom seulement (David ou Mabel). Le résultat final est :

1880        20      David

o

1880        20      Mabel

J'ai réussi à extraire l'année, le grade et le nom séparément, mais j'ai du mal à mettre en place une expression régulière complète. Je connais les bases de l'expression régulière, mais je ne peux actuellement pas accéder à mes notes.

J'essaie d'utiliser egrep.

3voto

TiGR Points 286
grep -Po '\d+\s+\d+\s+\w+' file.txt

2voto

kiri Points 25860

Je recommanderais une solution Python (je ne sais pas ce que vous utilisez actuellement) :

import re

re_find_data = re.compile(r'^(\d+)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\d+)$')

for line in open(r'/path/to/file'):
    for match in re_find_date.findall(line):
        print(match)
        # Do something with 'match'

        # You can index the 'match' tuple like so:
        print(match[2])
        # Print 3rd part (name)

Concernant grep

Je ne suis pas sûr que grep puisse être utilisé dans ce cas. Il n'a pas la capacité d'imprimer des groupes numérotés spécifiques, ce qui est ce dont vous avez besoin (je crois). Je serais intéressé de savoir si votre professeur (ou quelqu'un d'autre) a une solution avec grep pur.

Cette Regex devrait fonctionner, mais vous devrez extraire les champs que vous voulez des groupes numérotés (démonstration dans l'exemple Python) :

(\d+)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\d+)

grep n'est tout simplement pas le bon outil. Une Regex l'est, mais sous une implémentation différente (bonjour, Python !).

0voto

gbrooks Points 73

Cela était impossible (du moins dans le cadre de mon cours) en utilisant simplement grep. Mon professeur m'a informé quelques jours plus tard qu'il souhaitait que nous utilisions une combinaison de commandes pour obtenir le résultat souhaité. Cependant, toutes les réponses étaient valables et ont fonctionné lorsque je les ai essayées. Ceci est juste destiné à être une réponse directe à cette question basée sur des connaissances très débutantes (quelqu'un de mon expérience Ubuntu actuelle).

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