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 ,
.
3 Réponses :
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.
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
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
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)