[RESOLU] Suppression d'adresse IP dans un fichier

Suppression d'adresse IP dans un fichier [RESOLU] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 28-10-2008 à 17:22:18    

Bonjour,  
 
Je vous explique mon petit soucis :  
 
Dans un fichier "fichier_final", j'ai une liste d'IP. Dans un autre fichier "fichier_temp4", j'ai deux adresses IP par exemple. Le but est de supprimer les deux IP présentes dans le deuxième fichier dans la liste d'IP. Voici mon code :  
 

Code :
  1. while read addr1
  2. do
  3.        grep -vF "${addr1%;}" $rep/fichier_final > myfic
  4.        mv $rep/myfic $rep/fichier_final
  5. done < $rep/fichier_temp4


 
Cela fonctionne très bien pour les IP finissant par 3 chiffres (de 100 à 254). Mais mon problème survient quand je souhaite supprimer une IP dont le dernier octet est compris entre "10 et 99" et encore plus quand il est compris "entre 1 et 9".  
 
Par exemple pour l'adresse IP 192.168.138.16, il me supprime bien dans la liste d'IP cette adresse mais aussi les adresse finissant en 192.168.138.16X (X allant de 1 à 9).  
 
Est-il possible de gérer cela en shell ?  
 
Par avance merci.  
 
Cosca


Message édité par cosca44 le 29-10-2008 à 15:34:45
Reply

Marsh Posté le 28-10-2008 à 17:22:18   

Reply

Marsh Posté le 28-10-2008 à 17:54:42    

utilise sed, voir ed :o


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 28-10-2008 à 18:26:54    

expression régulière de grep ...
 

Code :
  1. grep -vFE '^'${addr1%;}'$' $rep/fichier_final > myfic

Reply

Marsh Posté le 29-10-2008 à 09:28:06    

Lorsque j'utilise la lligne :  
 
grep -vFE '^'${addr1%;}'$' $rep/fichier_final > myfic
 
J'obtiens le message d'erreur suivant :  
"grep: opérateurs de concordance spécifiés en conflit"
 
J'avoue ne pas trop comprendre l'utilisation de '^' et '$' ? Qu'est ce que cela représente ?  
 
Merci

Reply

Marsh Posté le 29-10-2008 à 09:29:25    

^ = début de ligne
$ = fin de ligne
 
tu devrais te renseigner sur les expressions régulières avant d'aller plus loin :o


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 29-10-2008 à 10:47:36    

Bonjour,
 
La commande comm (1) ne ferait-elle pas l’affaire ?
 
Quelque chose comme ça :

comm -3 fichier_final fichier_temp4

qui supprime de la sortie toutes les lignes apparaissant dans les deux fichiers (dans ton cas elle ne laisserait donc que les IP présentes dans fichier_final mais pas dans fichier_temp4).

Reply

Marsh Posté le 29-10-2008 à 11:21:43    

Par exemple, je teste cette ligne de commande :  
 
sed -e '/192.168.138.16$/d' fichier_final
 
Le résultat est que çà m'enlève quand même les @Ip terminant en 160, 161 ... alors que çà ne devrait pas les supprimer.  
 
Pour le grep -vFE j'ai toujours la même erreur "grep: opérateurs de concordance spécifiés en conflit" , j'ai l'impression que les options "-E" et "-F" ne sont pas compatible ?

Reply

Marsh Posté le 29-10-2008 à 11:25:53    

Je me demande s'il ne faut pas que je travail sur le nombre de caractère du dernier octet de l'adresse. C'est-à-dire, si l'adresse à supprimée est sur deux digits, alors je test que les adresses IP ayant deux digits dans le dernier octet et je supprimer l'adresse voulu dans cette liste.  
 
Mais çà me parait plus fastidieux ?

Reply

Marsh Posté le 29-10-2008 à 15:34:05    

Pour info, j'ai trouvé l'option qui me faisait défaut pour le grep.  
 
En fait il fallait rajouter l'option "-w" :  
 
grep -vwF ${addr1%;} $rep/fichier_final > myfic  
 
Et çà fonctionne très bien. Enfin mon script est terminé après avoir galéré pas mal sur ce détail.  
 
Merci pour votre contribution.  
 
Cosca


Message édité par cosca44 le 29-10-2008 à 15:34:25
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed