[RESOLU] Commande SED : suppresion d'une variable dans un fichier KO

Commande SED : suppresion d'une variable dans un fichier KO [RESOLU] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 20-10-2008 à 12:38:40    

Bonjour,  
 
Je développe actuellement un script pour optimiser le temps de traitement des demandes DNS-DHCP que l'onpeut m'effectuer.  
 
Mon problème se situe au nibveau de la commande SED. En fait, j'ai un fichier contenant une liste d'adresse IP et je souhaite supprimer dans ce fichier une adresse IP bien précise que je récupère dans une variable.  
 
Voic mon code, mon problème se situe au niveau de la ligne utilisant SED :  
 

Code :
  1. while read range addr1 addr2
  2. do
  3.     if [ "$addr2" == "" ]
  4.     then
  5.            addr=$(echo $addr1 | awk '{gsub(/;/," ",$dhcp_fin);print}')  //je récupère l'adresse IP en supprimant le ";" qui se trouve juste après.
  6.            sed "/$addr/d" $rep/testfichierbis > $rep/testfichier   //je souhaite suprrimer l'adresse IP en question du fichier contenant la liste d'IP.     fi
  7. done < $rep/monfichier


Le problème est que la suppression de l'IP ne fonctionne pas. Pourtant quand je fais un echo de ma variable "addr", il m'affiche bien l'IP (192.168.138.200 par exemple).  
J'ai tester en mettant l'adresse IP en dur dans le code et çà fonctionne mais pas avec la variable.  
 
Je pense que çà doit venir du dollar devant la variable qu'il doit interpréter comme un caractère spécial ?  
 
Avez vous une idée ?  
 
Par avance merci,  
 
Cosca


Message édité par cosca44 le 20-10-2008 à 15:50:48
Reply

Marsh Posté le 20-10-2008 à 12:38:40   

Reply

Marsh Posté le 20-10-2008 à 12:57:31    

Je ne vois pas comment ton truc peut marcher avec un $dhcp_fin entre simple quotes.
 
Quoi qu'il en soit ce n'est clairement pas la bonne façon de faire. Pourquoi tu ne fait pas simplement un grep -vF "${$addr%;}" $rep/testfichierbis > $rep/testfichier ? En plus c'est plus sûr, parce que là pour sed les points de ton address IP peuvent représenter n'importe quel caractère.

Reply

Marsh Posté le 20-10-2008 à 14:36:31    

La ligne avec $dhcp_fin fonctionne très bien, je n'ai pas eu de problème pendant tous les tests que j'ai effectué.  
 
Je viens de me lancer dans le script depuis deux semaines, donc c'est la seule façon que j'ai trouvé pour le moment.  
 
La ligne que tu me donnes permet de faire de la suppression ? En fait, je ne la comprend pas trop ? que signifie aussi le "%;" ?  
 
Par avance merci.

Reply

Marsh Posté le 20-10-2008 à 15:03:28    

Y'a un $ dans mon truc, il faut lire ${addr%;}. C'est comme $addr, sauf que le ";" final est supprimé. ${var%pattern} supprime tout ce qui match "pattern" à la fin de "var".
 
Oui, ma ligne remplace tes deux lignes.
 
Edit : en fait avec le coup du $dhcp_fin ça marche parce que tu n'as pas de variable qui s'appelle dhcp_fin dans ton awk, donc pour lui c'est comme $0. Mais il faudrait soit mettre $0, soit rien du tout : gsub(/;/, " " )


Message édité par matafan le 20-10-2008 à 15:06:22
Reply

Marsh Posté le 20-10-2008 à 15:11:09    

Un très grand merci à toi pour ton aide.  
Et en plus le code est moins chargé.

Reply

Marsh Posté le 06-11-2008 à 20:52:04    

C'est en Anglais, mais je vous recommande chaudement cette lecture pour les "parameter expansion" http://wooledge.org:8000/BashFAQ/073
( c'est cette feature qui est utilisée )

Reply

Sujets relatifs:

Leave a Replay

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