Bonjour à tous.
Je chercher un ligne de commande me permettant d'extraire d'un fichier texte tout les lignes contenant un chaine.
Plus précisément je recherche a extrait d'un fichier log toute les ligne contenant une ip et l'enregistrer sous un nouveau fichier.
# SOLUTION
Posté par gotcha5832 . Évalué à 1.
Autant pour moi j'ai finit par trouver:
grep 'chaine' fichier >fichier_de_sortie
[^] # Re: SOLUTION
Posté par wismerhill . Évalué à 2.
Sauf que dans ton message initial, tu mentionne des adresse IP. Et si c'est de l'IPv4, elles contiendront des points.
Or pour grep (et dans les expressions rationnelles en général, même en version restreinte), le point signifie n'importe quel caractère.
Donc si tu veux que ça extraie uniquement les lignes qui contiennent les adresses IP telles quelles (plutôt que la même chose mais avec n'importe quoi à la place des points), il faut soit protéger les points par des backslash, soit utiliser l'option -F de grep, qui lui dit de traiter la chaine telle quelle, plutôt que comme une expression rationnelle.
(et je ne parle même pas de caractères qui viennent avant ou après le fragment de chaîne repéré dans la ligne)
[^] # Re: SOLUTION
Posté par Michaël (site web personnel) . Évalué à 4.
Protéger avec des backslashes c'est pénible parcequ'il faut parfois protéger une fois supplémentaire lorsqu'y a une indirection (par exemple si on appelle
grep
depuis le C avecexec
). C'est pour cela que beaucoup de personnes préfèrent protéger le point et d'autres caractères spéciaux avec des crochets, comme dans
pour une expression rationnelle qui reconnaît le textegrep 'a[.]b'
a.b
.[^] # Re: SOLUTION
Posté par robin . Évalué à 2.
Merci pour la technique, je ne connaissais pas. Comme quoi ça sert de visiter les fofo ^^
bépo powered
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.