1
votes

Utilisation de regex pour rechercher un modèle de chaîne dans un fichier avant et après

J'ai un gros fichier journal et je souhaite obtenir certaines informations de ce fichier. J'essaie d'utiliser grep et regex pour extraire les données, mais je n'obtiens nulle part.

Le format d'une seule ligne est:

','xxx.xxx.xxx','

zéro = nombres et x = un caractère

Mais je veux tout après le second ',' et avant le dernier ','

J'ai essayé

grep [[a-zA-Z].\.[a-zA-Z].\.[a-zA-Z]]

et tout est trié mais je n'ai pas réussi à l'obtenir

J'espère obtenir juste:

000.00.000.00,000,xxx,xxx.xxx.xxx,xxx

mais sans le , .


0 commentaires

3 Réponses :


2
votes

Si vous êtes d'accord avec sed , pourriez-vous essayer de suivre (en fonction de votre description).

sed 's/\([^,]*\),\([^,]*\),\([^,].*\)\(.*\)/'"'"','"'"'\3'"'"','"'"'/'  Input_file

Ici, j'utilise sed la capacité de code> à conserver en mémoire les valeurs regex correspondantes que nous pourrions utiliser lors de la substitution.


4 commentaires

Oui, je vais essayer


oui cela a fonctionné mais il a ajouté "','" à la fin de la chaîne et après


@trigster, heureux que cela vous ait aidé, donnez-lui quelque temps et lorsque vous avez peu de réponses, vous pouvez sélectionner n'importe quelle réponse parmi celles-ci comme étant correcte aussi, bravo.


Désolé, cela n'a pas fonctionné, j'étais un peu hâtif, il a quand même ajouté tout avant le après la virgule, mais il a supprimé les chiffres



3
votes

Utilisation de Perl:

s/              # substitute
  ^             # beginning of line
  .+?           # 1 or more any character but newline, not greedy
  [a-z]+        # 1 or more letters
  ,             # a comma
  ([^,]+)       # group 1, 1 or more non comma
  .*            # 0 or more any character but newline
  $             # end of line
/               # replace with
  $1            # content of group 1
/i              # case insensitive

Résultat:

xxx.xxx.xxx

Explication:

perl -ape 's/^.+?[a-z]+,([^,]+).*$/$1/i' file


0 commentaires

0
votes

Utilisation de python:

    import re
    str = "000.00.000.00,000,xxx,xxx.xxx.xxx,xxx"
    matched = re.findall('.*([a-zA-Z]{3}\.[a-zA-Z]{3}\.[a-zA-Z]{3}),[a-zA-Z]{3}$',str)
    print(matched)


0 commentaires