2010-09-20 23 views
0

j'ai un gros fichier journal apache et je dois filtrer cela et laisser seulement (dans un nouveau fichier) le journal à partir d'un certain IP: 192.168.1.102Filtre fichier journal apache en utilisant l'expression régulière

J'essayer d'utiliser cette commande:

sed -e "/^192.168.1.102/d" <input.txt> output.txt 

Mais "/ j" supprime les entrées, et je needt de les laisser.

Merci.

+1

N'oubliez pas que le [dot] (http://www.regular-expressions.info/dot.html) ('.') a un sens dans une expression régulière, vous devez donc y échapper si vous voulez point littéral. –

Répondre

2

Qu'en est-il de l'utilisation de grep?

cat input.txt | grep -e "^192.168.1.102" > output.txt 

EDIT: Comme indiqué dans les commentaires ci-dessous, les points s'échappant dans le regex est nécessaire pour la rendre correcte. Échapper dans la regex se fait avec des barres obliques inverses:

cat input.txt | grep -e "^192\.168\.1\.102" > output.txt 
+1

+1, grep est le bon outil. Il n'y a pas besoin d'utiliser 'cat', ça ralentit les choses et". " devrait être échappé: 'grep -e"^192 \ .168 \ .1 \ .102 "input.txt> output.txt' –

+1

PS: Comme @Daniel Vandersluis l'a noté correctement, vous devez échapper les points dans la regex. Les règles d'échappement peuvent dépendre de l'interpréteur de commandes que vous utilisez, généralement l'échappement est effectué par une barre oblique inverse. – Tomalak

+0

Cela fonctionne sans s'échapper. – gustyaquino

2

sed -n 's/^192\.168\.1\.102/&/p'

sed est plus rapide que grep sur mes machines

+0

Pas d'intérêt: Combien plus rapide est-il? – Tomalak

+1

Test avec un fichier de 63 000 lignes, 'sed' prend 1,676s et' grep' prend 4,633s –

+0

il suffit d'utiliser la commande 'time', car cela dépend de la plateforme – gertas

0

Je pense que l'utilisation de grep est la meilleure solution, mais si vous voulez utiliser sed vous pouvez faire comme ceci:

sed -e '/^192\.168\.1\.102/b' -e 'd' 

la commande b va ignorer les commandes suivantes si les matchs regex et la commande d seront donc supprimer les lignes pour WHI ch l'expression rationnelle ne correspond pas.