Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1079 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [SHELL] Remplacer un chaine précise dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SHELL] Remplacer un chaine précise dans un fichier

n°1207251
cosca14
Posté le 26-03-2010 à 16:21:13  profilanswer
 

Bonjour,  
 
Je suis en train de mettre un script en place pour configurer les différents services qui seront présent sur des serveurs RHEL.  
 
Et je souhaite modifier une ligne ou plus précisément un numéro de port pour une ligne dans le fichier /etc/services.  
 
Voici la ligne que je souhaite modifier :  
 
ndmp            9000/tcp                        # BackupExec
 
en  
 
ndmp            10000/tcp                        # BackupExec
 
J'utilise donc sed de cet manière :  
 
cat /etc/services | sed -e "s/9000/10000/g" > /etc/services.new
 
Donc çà remplace bien le 9000 par le 10000 pour les deux lignes mais le souci est que çà remplace aussi le 9000 pour le port 19000 du coup dans mon fichier j'ai aussi les deux lignes suivantes qui sont modifiées :  
 
igrid           19000/tcp                       # iGrid Server
igrid           19000/udp                       # iGrid Server
 
et qui deviennent  
 
igrid           110000/tcp                       # iGrid Server
igrid           110000/udp                       # iGrid Server
 
Je n'arrive pas à trouver d'option pour dire je veux remplacer uniquement la chaine "9000" et pas la "19000".  
Auriez-vous une idée ?  
 
Par avance merci
 
 
 
 
 
 
 
 
 
 

mood
Publicité
Posté le 26-03-2010 à 16:21:13  profilanswer
 

n°1207253
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 26-03-2010 à 16:27:07  profilanswer
 

1/ utiliser sed -i pour ce genre de choses
2/ on ne modifie pas /etc/services, c'est des manières de goret
3/ utiliser une regexp qui spécifie que le 9000 doit être précédé d'un espace me semble bien


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1207254
kisscoolz
Posté le 26-03-2010 à 16:30:36  profilanswer
 

Quelque chose comme ca peut etre  
 

Code :
  1. sed -i .bak 's/ 9000/ 10000/g' /etc/services


 
Mais je suis d'accord que ce n'est pas idéal de jouer avec ce fichier. Pourquoi ne pas spécifier directement à ton service de fonctionner sur un port spécifique ?


Message édité par kisscoolz le 26-03-2010 à 16:31:44
n°1207255
mikala
Souviens toi du 5 Novembre...
Posté le 26-03-2010 à 16:30:36  profilanswer
 

cosca14 a écrit :

Bonjour,  
 
Je suis en train de mettre un script en place pour configurer les différents services qui seront présent sur des serveurs RHEL.  
 
Et je souhaite modifier une ligne ou plus précisément un numéro de port pour une ligne dans le fichier /etc/services.  
 
Voici la ligne que je souhaite modifier :  
 
ndmp            9000/tcp                        # BackupExec
 
en  
 
ndmp            10000/tcp                        # BackupExec
 
J'utilise donc sed de cet manière :  
 
cat /etc/services | sed -e "s/9000/10000/g" > /etc/services.new
 
Donc çà remplace bien le 9000 par le 10000 pour les deux lignes mais le souci est que çà remplace aussi le 9000 pour le port 19000 du coup dans mon fichier j'ai aussi les deux lignes suivantes qui sont modifiées :  
 
igrid           19000/tcp                       # iGrid Server
igrid           19000/udp                       # iGrid Server
 
et qui deviennent  
 
igrid           110000/tcp                       # iGrid Server
igrid           110000/udp                       # iGrid Server
 
Je n'arrive pas à trouver d'option pour dire je veux remplacer uniquement la chaine "9000" et pas la "19000".  
Auriez-vous une idée ?  
 
Par avance merci


Il faudrait prendre la ligne entière  

Citation :


cat /etc/services | sed -e "s/9000\/tcp/10000\/tcp/g" > /etc/services.new


devrait faire l'affaire.
A noter cependant pour la petite histoire que /etc/services n'est pas forcément utiliser par les daemons pour configurer leur port d'écoute tcp/udp... bref la configuration des services n'a pas forcément de raison de se trouver là...


---------------
Intermittent du GNU
n°1207260
p-seeker23
Posté le 26-03-2010 à 17:04:19  profilanswer
 

awk '$1~/^[nN][dD][mM][pP]/ && $2~/^9000\/tcp/ {sub("9000","10000", $0); print $0}' /etc/hosts >/etc/hosts.maj


 
Ça effectue le remplacement voulu, avec un maximum de fiabilité.
Si le formatage des lignes n'est pas important pour toi, sub("9000","10000", $2) est encore plus fiable que sub("9000","10000", $0).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [SHELL] Remplacer un chaine précise dans un fichier

 

Sujets relatifs
[SHELL] Remplacer une valeur dans un fichierAWK recherche dans un fichier a entete
Recup de fichier depuis livecdcréer répertoire selon le nom de fichier
Fichier Bat copie sans précisionsRemplacer chaine (un peu complexe) par une autre
suppression en masse et rapide de fichier 
Plus de sujets relatifs à : [SHELL] Remplacer un chaine précise dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR