Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 14/03/2017, à 13:01

Numalemanu

Pb sed et suppression de multiples lignes simultanèment

Bonjour à tous!

J'ai un gros fichier de logs de 49Go.
J'ai créé un petit fichier contenant une liste d'adresse IP.
Je souhaite supprimer du fichier de logs toutes lignes qui contiennent des IP présentes dans ma liste.
J'ai fait ça:

while read i
do
sed  "/$i/d" fichier_de_logs
done < /var/log/fortigate/liste_ip

Et je le lance:

./mon_script > resultat

Problème: sed prend la 1ère IP du fichier et me met dans resulat le fichier de logs moins les lignes contenant cette IP, puis prend la 2ème IP du fichier et me met dans résultat le fichiers de logs moins les lignes contenant cette 2ème IP et ainsi de suite...c'est le bordel.
Comment faire en sorte qu'il mette dans resultat le fichier de log moins toutes les lignes contenant les IP de la liste?

Merci pour vos réponses.

Hors ligne

#2 Le 14/03/2017, à 13:16

Laurent85

Re : Pb sed et suppression de multiples lignes simultanèment

Fais le contraire, duplique le fichier de log, appelle le resultat et supprime de résultat les ip avec l'option -i de sed:

sed -i "/$i/d" resultat

Hors ligne

#3 Le 14/03/2017, à 13:51

MicP

Re : Pb sed et suppression de multiples lignes simultanèment

Bonjour

En rassemblant les adresses IP dans une variable, un seul sed pourrait suffire

unset varPourSed
while read ip
do
  printf -v varPourSed "$varPourSed%s\\\|" $ip
done < /var/log/fortigate/liste_ip
sed -i "/${varPourSed::-2}/d" fichier_de_logs

Contenu de ${varPourSed::-2} : 192.168.122.1\|192.168.122.5\|102.198.12.5

Mais je ne sais pas comment sont "rangées" les adresses IP dans le fichier /var/log/fortigate/liste_ip
alors il faudra peut-être revoir while read

Dernière modification par MicP (Le 14/03/2017, à 14:38)

Hors ligne

#4 Le 14/03/2017, à 14:36

Watael

Re : Pb sed et suppression de multiples lignes simultanèment

salut,

pourquoi torturez-vous la ligne de commande ?

grep -vf liste_ip fichier.log >resultat

une boucle for itère sur les éléments d'une liste :

$ for ip in /chemin/fichier; do echo $ip; done
/chemin/fichier

!

Dernière modification par Watael (Le 14/03/2017, à 14:37)


eval, c'est mal.

Hors ligne

#5 Le 14/03/2017, à 14:46

MicP

Re : Pb sed et suppression de multiples lignes simultanèment

Bonjour Watael

…une boucle for itère sur les éléments d'une liste :…

Oui, j'étais juste en train de remplacer le for in par un while read quand tu as posté ton message.

========
Va falloir que je lise un peu mieux les manpages, en particulier celle de grep.

Hors ligne

#6 Le 17/03/2017, à 14:51

Numalemanu

Re : Pb sed et suppression de multiples lignes simultanèment

Merci pour vos réponses.
Les commandes de MicP Et Watael fonctionnent bien, mais le script s'interrompt très rapidement alors qu'il a à peine commencé le travail.
Y a-t-il une limite à la taille de ma liste d'IP ou à la taille du fichier à traiter qui empêcherait le script de continuer?

Dernière modification par Numalemanu (Le 17/03/2017, à 14:51)

Hors ligne