Remplacer un chaine précise dans un fichier [SHELL] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 26-03-2010 à 16:27:07
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
Marsh Posté le 26-03-2010 à 16:30:36
Quelque chose comme ca peut etre
Code :
|
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 ?
Marsh Posté le 26-03-2010 à 16:30:36
cosca14 a écrit : Bonjour, |
Il faudrait prendre la ligne entière
Citation : |
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à...
Marsh Posté le 26-03-2010 à 17:04:19
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).
Marsh Posté le 26-03-2010 à 16:21:13
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